ארכיון יומי: 22 דצמבר, 2010

שדה עם זהות

Firebird 3 הולך להכיל סוג שדה חדש. טוב זה למעשה לא סוג שדה, אלא יותר סוכר סנטטי. בעיקרון הוא מספק לנו שדה שהוא מקודם בצורה אוטומטית (auto increment) רק למספרים שלמים ויש עם זה גם כמה הגבלות.

למה אני אומר שזה סוכר סינטטי ? ובכן תמיד אפשר היה לעשות מקדם אוטומטי, רק מקודם היה לך יותר כוח לקבוע איך הוא יקודם, והרבה אנשים שרגילים לקיצורי דרך החליטו לבקש את הפיטצ'ר הזה אז הוסיפו. זה לא במקום השיטה המקורית אלא בנוסף. אישית ד"א אני חושב שזה דווקא אחד מהפיטצ'רים הפחות חשובים לFirebird עצמו.

הוא עדיין משתמש ב sequence שנוצר אוטומטי עבור הבקשה (בניגוד למסד נתונים שכולנו מכירים ולא אוהבים).

אז איך זה נראה ? התחביר היבש הוא כזה:

<column definition> ::= <name> <type> GENERATED BY DEFAULT AS IDENTITY <constraints>

בפועל, התחביר יראה בצורה הבאה:

create table objects (
  id integer generated by default as identity primary key,
  name varchar(15)
);

insert into objects (name) values ('Table');
insert into objects (name) values ('Book');
insert into objects (id, name) values (10, 'Computer');

select * from objects;
          ID NAME
============ ===============
           1 Table
           2 Book
          10 Computer

וההגבלות הן מאוד פשוטות: צריך מספר שיכול להתחיל ב0, כלומר:

smallint, integer, bigint, numeric(x, 0) , decimal(x, 0)

בנוסף, השדה לא יכול להיות שדה מחושב (COMPUTED), היות ואי אפשר להשתמש במידע של שדות אחרים, וכן לא ניתן לתת לו ערך ברירת מחדל.

במידה ורוצים יותר כוח ושליטה, אפשר להשתמש עדיין בדרך המקורית במקום הדרך הזו.

לעוד פרטים, אתם יכולים לראות את התעוד, ואת דיווח הבאג (בקשה לתוספת) בנושא.