2010-03-01 5 views
1

У меня есть четыре стола: ItemCategory, Items, DiamondCategoy и Diamonds.Помощь с дизайном базы данных

пользователям хранить подробную информацию о позициях и указать, имеет ли он алмаз на, например:

ItemCategory: Ring 
Item: R1 

Если есть алмаз, то:

DiamondCategory: Round 
Diamond: D1 

Так R1 кольца имеет D1 Рулонный

элемент не может иметь никаких алмазов, например:

ItemCategory: Ring 
Item: R1 
DiamondCategory: None 
Diamond: None 

Я не могу понять, как создать отношения. Я придумал это решение, исправьте меня, если я ошибаюсь.

ItemCategory:

c_Id >> PK 

Предметы:

p_Id >> PK 

c_Id >> FK 

d_Id >> FK 

Алмазы:

d_Id >> PK 

dc_Id >> FK 

DiamondCategory:

dc_Id >> PK 

Это правильно ?.

ответ

1

Это выглядит хорошо для меня, насколько это возможно. Если элемент может иметь более одного типа алмаза (как это делают многие кольца), вы, вероятно, хотите иметь таблицу пересечения (перехода), например:

Предметы:

p_Id >> PK 

c_Id >> FK 

ItemDiamonds

d_Id >> FK >> 
      >> UK or PK 
p_id >> FK >> 

no_of_diamonds 

Идентификационный номер и Алмазный идентификатор - это индивидуальные внешние ключи, а вместе (Идентификатор товара, Алмазный идентификатор) образуют первичный или уникальный ключ. Атрибут no_of_diamonds предполагает, что Item может иметь более одного типа Diamond.

Имея отдельную таблицу для каждой просмотровой коды (ваши таблицы категории) имеет два преимущества:

  • Это единственный способ обеспечить внешний ключ для соответствующей категории ID для данной категории
  • Продукты баз данных со сложными оптимизаторами (такими как Oracle) могут использовать более конкретные таблицы для получения более точных планов выполнения.
2

Если у предмета и бриллианта есть только одна категория, зачем вам нужны отдельные таблицы для них? Просто укажите категорию как атрибут на ваших таблицах Item и Diamond.

Тогда у вас будет две таблицы, одна для предметов и одна для Diamond, а третья таблица, которая служит в качестве таблицы поиска между ними, и сохранит первичный ключ для элемента и первичного ключа для соответствующего алмаз, который он имеет.

+0

Это лучшее решение. Если вы не указали ключевые столбцы, вы потратите много времени на объединение таблиц. –

+0

Ну, у меня есть таблицы категорий, каждая из которых имеет свои собственные атрибуты. ItemsCategory имеет 10 записей, а DiamondCat - 8. Когда я добавляю новый элемент, я выбираю его категорию из выпадающего списка, которое ограничено таблицей ItemsCat, вставляет детали элементов, и если у него есть алмаз, я выбираю его категорию и вес. Я не могу этого сделать, если категория находится в одной таблице. – DanSogaard

Смежные вопросы