2017-01-15 1 views
-1

У меня проблема с написанием в mySQL. Я сделал концептуальную модель своих баз данных, но понятия не имею, как применить ее в mySQL.Код Inheritage в SQL

Я сделал дерево дерева для дерева как свое суеверие, которое делится на новое и старое транспортное средство и суетность. После этого он будет делиться на тракторы, мотовелосипед и так далее. Все субтитры имеют одинаковые атрибуты, такие как бренд, мощность и т. Д.

У меня есть идеал, как я хотел бы его построить, но НЕТ ИДЕИ, как его кодировать. Могу ли я, пожалуйста, получить руководство?

+0

Речь идет о переводе отношений в таблицы mysql, или это о переводе концептуальной схемы (ER ?, UML?) в отношения? –

+0

У меня есть концептуальная схема я проблема transalating ее в отношениях в таблицы MYSQL ДА :) Так у меня vechilas, которые старые и новые - каждый из них содержит тракторы, лесные машины и строительные машины все vehical имеют те же атрибуты, что и Торговая марка, год выпуска, топливо, расход топлива, мощность двигателя –

ответ

0

Хм - существует несколько способов реализации концептуальной схемы в БД; курсы баз данных обычно тратят 10 слайдов на эту тему, поэтому я не могу их обсуждать и обсуждать здесь. Но я делаю одно предположение, которое должно соответствовать:

Я полагаю, что автомобиль старый или новый, но не тот и другой.

Тогда я сделаю один базовый стол для автомобиля. Различие между new и old осуществляется с помощью атрибута дискриминатора isNew; Поскольку вы упоминали о множественном наследовании, я предполагаю, что транспортное средство может одновременно быть трактором и лесной машиной; Поэтому я бы поместить отдельный булев индикатор для каждого из этих типов:

create table vehicle (
    id int primary key, 
    isNew bool not null, 
    isTractor bool, 
    isForestMachine bool, 
    ... 
    brand varchar(20), 
    productionYear int, 
    ... 
); 

Если транспортное средство не может быть несколько типов в то же время, то один атрибут дискриминатора для типа будет лучше:

create table vehicle (
    id int primary key, 
    isNew bool not null, 
    type ENUM('tractor', 'forest', 'construction'), 
    brand varchar(20), 
    productionYear int, 
    fuel int, 
    fuelcon int, 
    motorpower int); 
+0

Автомобиль не может быть одного типа. Это создание БД является составленным. Таким образом, у меня есть компания, которая продает старые и новые макины, которые являются тракторами, лесами и строительными машинами, что я предлагаю. Поэтому таблицу БД, которую я хотел бы показать, это «старая/новая машина, тип машины, а затем атрибуты ». если это имеет больше смысла. Мы говорили в классе о наследовании, но только, как написать его в концептуальной схеме, но никогда в БД. –

+0

Так пример 2 должен работать для вас - смотрите отредактированный ответ –

+0

создать таблицу автомобиля ( идентификатор ИНТ первичный ключ, isNew BOOL не нулевой, тип ENUM («Трактор», «лес», «строительство»), \t Изольда BOOL не нулевой, тип ENUM ('трактор', 'лес', 'строительство'), бренд VARCHAR (20), productionYear INT, топлива INT, fuelcon INT, motorpower целое); –

0

Когда вы делаете объектно-ориентированный дизайн модели, вы часто создаете суперклассы и подклассы.

Например, вы можете создать суперкласс с именем vehicle. Затем вы можете создавать классы, которые наследуются от vehicle, называемых, я думаю, roadVehicle и offroad. Тогда класс, наследующий от roadVehicle, может быть car. & c. & c.

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

Итак, вам нужна одна таблица, содержащая все описательные атрибуты для каждого вида транспортного средства. Каждая строка таблицы описывает одно транспортное средство.

Таким образом, вы можете иметь столбцы для

id    an autoincrementing id 
    is_new   boolean. true means new, false means used. 
    make   "Volvo", "International Harvester", &c. 
    model   "50D", "King Cab", etc. 
    year   the model year of the machine text like "2001", "2015a" 
    date_of_manufacture a date field 
    vehicle_type a text string. "car", "log truck", "tractor", and so forth 
    engine_type a text string "diesel" "gasoline", "electric", "diesel-electric" &c. 
    engine_power 75kW, etc. maybe a number if everything is in kW. 
    number_of_wheels 4 for a car. 18 for a tractor-trailer, etc 
    tool   text. blank for cars. "Log grapple," maybe, for a log truck 
    description text. "Staffan's old Citroen" for example. 
    registration_locale text. SE, US, DE, etc. 
    registration_number text. ABC-123 etc. 

Вы получаете идею. Если вы хотите увидеть информацию об используемых автомобилях вы даете этот запрос:

SELECT * FROM vehicles WHERE is_new = 0 AND vehicle_type = 'car' 

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

Но это не имеет значения. Это простой и удобный способ создания базы данных.

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