Связь дизайна для магазина автозапчастей базе


Я создаю базы данных для магазина автозапчастей (проект школы). На данный момент, я не уверен, что модели отношений, особенно в модели, делают, абсолютно правильно (я действительно не имеют опыта об этой области).

Я не специалист в этой области, поэтому мне нужна помощь.

create database AutoParts2

use AutoParts2
go

create table Make
(
MakeID int not null identity(1,1),
Name varchar(50) not null,
constraint PK_Make primary key (MakeID)
)

create table Model
(
ModelID int not null identity(1,1),
MakeID int not null,
Name varchar(50) not null,
constraint PK_Model primary key (ModelID),
constraint FK_Model_Make foreign key (MakeID)
references Make(MakeID)
)

create table [Year]
(
YearID tinyint not null identity(1,1),
Name char(4) not null,
constraint PK_Year primary key (YearID)
)

create table Model2Year
(
Model2YearID int not null identity(1,1),
ModelID int not null,
YearID tinyint not null,
constraint PK_Model2Year primary key (Model2YearID),
constraint FK_Model2Year_Model foreign key (ModelID)
references Model(ModelID),
constraint FK_Model2Year_Year foreign key (YearID)
references [Year](YearID)
)

create table Category
(
CategoryID tinyint not null identity(1,1),
Name varchar(30) not null,
constraint PK_Category primary key (CategoryID)
)

create table Subcategory
(
SubcategoryID tinyint not null identity(1,1),
CategoryID tinyint not null,
Name varchar(30) not null,
constraint PK_Subcategory primary key (SubcategoryID),
constraint FK_Subcategory_Category foreign key (SubcategoryID)
references Category(CategoryID)
)

create table Model2Year2Category
(
Model2Year2CategoryID int not null identity(1,1),
Model2YearID int not null,
CategoryID tinyint not null,
constraint PK_Model2Year2Category primary key (Model2Year2CategoryID),
constraint FK_Model2Year2Category_Model2Year foreign key (Model2YearID)
references Model2Year(Model2YearID),
constraint FK_Model2Year2Category_Category foreign key (CategoryID)
references Category(CategoryID)
)

create table Brand
(
BrandID int not null identity(1,1),
Name varchar(50) not null,
constraint PK_Brand primary key (BrandID)
)

create table Brand2Subcategory
(
Brand2SubcategoryID int not null identity(1,1),
BrandID int not null,
SubcategoryID int not null,
constraint PK_Brand2Subcategory primary key (Brand2SubcategoryID),
constraint FK_Brand2Subcategory_Brand foreign key (BrandID)
references Brand(BrandID),
constraint FK_Brand2Subcategory_Subcategory foreign key (SubcategoryID)
references Subcategory(SubcategoryID)
)

create table Part
(
PartID int not null identity(1,1),
Name varchar(50) not null,
BrandID int not null,
PartNumber varchar(50) not null,
Description varchar(200),
constraint PK_Part primary key (PartID),
constraint FK_Part_Brand foreign key (BrandID)
references Brand(BrandID)
)

create table Model2Year2Part
(
Model2Year2PartID int not null identity(1,1),
Model2YearID int not null,
PartID int not null,
constraint PK_Model2Year2Part primary key (Model2Year2PartID),
constraint FK_Model2Year2Part_Model2Year foreign key (Model2YearID)
references Model2Year(Model2YearID),
constraint FK_Model2Year2Part_Part foreign key (PartID)
references Part(PartID)
)

create table Brand2Subcategory2Part
(
Brand2Subcategory2PartID int not null identity(1,1),
Brand2SubcategoryID int not null,
PartID int not null,
constraint PK_Brand2Subcategory2Part primary key (Brand2Subcategory2PartID),
constraint FK_Brand2Subcategory2Part_Brand2Subcategory foreign key (Brand2SubcategoryID)
references Brand2Subcategory(Brand2SubcategoryID),
constraint FK_Brand2Subcategory2Part_Part foreign key (PartID)
references Part(PartID)
)


2931
3
задан 2 ноября 2011 в 09:11 Источник Поделиться
Комментарии
2 ответа

У вас есть все таблицы вам нужны и у вас есть многие-ко-многим отношения правильно, я считаю.

Я хотел бы предложить, что вы добавить поле родитель категорию, а затем создать иерархию категорий вместо категории стол с одной таблицей подкате.

create table Category(
CategoryId int not null identity(1,1),
ParentCategoryId int null,
CategoryName nvarchar(100) not null,
primary key (CategoryId))

Как стиль, я бы назвал многие-ко-многим таблиц с подчеркиваниями вместо цифр, т. е. Model_Year_Part.

Обратите внимание, что я использовал nvarchar вместо varchar.

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

4
ответ дан 3 ноября 2011 в 11:11 Источник Поделиться

Я считаю следующие вещи:


  • Вы уверены, что вам нужен год таблица? Можно хранить год в Model2Year таблицы напрямую.

  • Я хотел опустить Model2Year.Model2YearID атрибута. Вместо этого я хотел бы использовать составной первичный ключ (Модэлид, год) или (Модэлид YearID).

  • Возможно ли, что, например, конкретная модель в categoryX в 1999 году и в categoryY в 2000 году? Если нет, то подключите модель и категория столик с model_to_category вспомогательная таблица ((Модэлид Кодтипа) является первичным ключом) вместо нынешних Model2Year2Category стол.

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

1
ответ дан 3 ноября 2011 в 06:11 Источник Поделиться