Нормализовать базу данных SQL - PullRequest
3 голосов
/ 14 сентября 2011

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

Это мои 3 таблицы:

Кредиты

id_loan (PK)
product
amount 
status

Проверка

id_check (PK)
id_customer
amount

EFT

id_eft (PK)
id_customer
amount

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

Удаление

id_payment (PK)
id_loan (FK loans)
id_disposal (FK checks or EFT)
disposal_type

В этой таблице я храню информацию о том, относится ли ссуда к чеку или к EFT, поле disid_type - это varchar с двумя возможными значениями "check" или "EFT". Поле id_disposal действует как внешний ключ для двух таблиц.

Проблема в том, что я думаю, что моя база данных не нормализована с этой структурой, я прав? Как лучше всего это решить?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

В объектном мире вы бы использовали для этого наследование. Будет существовать базовый тип Disposal, из которого будут получены CheckDisposal и EftDisposal. Современные O / RM поддерживают несколько методов для отображения этого на реляционную структуру.

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

TablePerType отображает записи в разные таблицы с отношением fk обратно к базовой таблице. Конечно, для этого требуется больше объединений (особенно для глубоких или широких иерархий), но в БД может быть обеспечена целостность данных.

2 голосов
/ 14 сентября 2011

Вам нужно что-то вроде прикрепленного.Обратите внимание, что таблица customer_loans является лишней и избыточной, но если есть какие-либо столбцы, которые относятся к клиенту и кредиту, а не к платежам по кредиту клиента, то это именно то, что нужно сделать.

Loans Schema

...