Russian Qt Forum

Программирование => Общий => Тема начата: Karl-Philipp от Август 31, 2009, 10:04



Название: структура БД
Отправлено: Karl-Philipp от Август 31, 2009, 10:04
mysql.
Создаю БД с тремя таблицами

- buildings
  - rooms
    - seats
приблизительно набросал:
 
Код
SQL
 CREATE TABLE buildings  (buildingId INTEGER AUTOINCREMENT NOT NULL,
       title VARCHAR(100) NOT NULL,
       PRIMARY KEY (buildingId));
 
   CREATE TABLE rooms   (roomId INTEGER AUTOINCREMENT NOT NULL,
       title VARCHAR(100) NOT NULL,
       buildingId INTEGER NOT NULL,
       PRIMARY KEY (roomId),  
       FOREIGN KEY (buildingId) REFERENCES buildings(buildingId)
           ON UPDATE CASCADE
           ON DELETE RESTRICT
             ) ENGINE=InnoDB CHARACTER SET=UTF8;
 
 
   CREATE TABLE seats   (seatId INTEGER AUTOINCREMENT NOT NULL,
       title VARCHAR(100) NOT NULL,
       roomId INTEGER,
       buildingId INTEGER,
       PRIMARY KEY (seatId),
       FOREIGN KEY (roomId) REFERENCES rooms(roomId)
           ON UPDATE CASCADE
           ON DELETE RESTRICT,
       FOREIGN KEY (buildingId) REFERENCES buildings(buildingId)
           ON UPDATE CASCADE
           ON DELETE RESTRICT
             ) ENGINE=InnoDB CHARACTER SET=UTF8;
 
Правильно ли я связываю таблицу seats с buildings?
   


Название: Re: структура БД
Отправлено: Admin от Август 31, 2009, 10:36
Вы бы написали - зачем вам эти 3 таблицы, от самой задачи очень много зависит.


Название: Re: структура БД
Отправлено: Karl-Philipp от Август 31, 2009, 10:45
Есть несколько зданий, в них комнаты, в комнатах места (места - компьютеры).
Надо создать базу данных по занимаемым местам.


Название: Re: структура БД
Отправлено: BlackTass от Август 31, 2009, 10:51
а зачем вам вообще нужна связь мест со зданиями? вроде бы эта связь однозначно пойдет через таблицу комнат


Название: Re: структура БД
Отправлено: Karl-Philipp от Август 31, 2009, 10:56
вот это то и хотел уточнить - как правильно сделать :)
выходит, что надо связывать места со зданиями через комнаты таким образом?
Код
SQL
CREATE TABLE seats   (seatId INTEGER AUTOINCREMENT NOT NULL,
...
       FOREIGN KEY (buildingId) REFERENCES rooms(buildingId)
           ON UPDATE CASCADE  
           ON DELETE RESTRICT
       ) ENGINE=InnoDB CHARACTER SET=UTF8;
upd: разобрался: эта связь вообще не нужна.