2016-03-13 5 views
1

В настоящее время я разрабатываю реляционную базу данных для проекта, над которым я работаю.Реляционная структура базы данных - создать класс сущности для типа оплаты?

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

Если у меня есть Entity:

SALE(SALE_ID, SALE_TYPE, SALE_AMOUNT, CUSTOMER_ID) 

и

PURCHASE(PURCHASE_ID, PURCHASE_TYPE, PURCHASE_AMOUNT, CUSTOMER_ID) 

Если PURCHASE_TYPE и SALE_TYPE в каждой организации может быть только Cash ИЛИ карта .. бы, если бы стоит создать новый объект, называемый E.g. Transaction Type с этой структурой

TRANSACTION_TYPE(TYPE_ID, PAYMENT_TYPE)

Тогда замена PURCHASE_TYPE и SALE_TYPE с TYPE_ID в качестве внешнего ключа в другой 2 субъекта?

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

+0

Поскольку количество типов носит постоянный характер, для этого можно использовать тип данных Enum. – 1000111

+0

Есть ли способ представить с помощью Enum для этого в концептуальном и логическом этапе проектирования, поскольку это все, что мне необходимо доставить на этом этапе. Или я должен просто сохранить оригинальную структуру? – LukeeTaylorr

+0

Fwiw, у меня будет отдельная таблица типов платежей. Это позволяет вам добавлять способы оплаты в будущем (например, PayPal) без изменения вашей структуры. – Strawberry

ответ

1

Как вы упомянули типы оплаты являются:

  • Cash
  • Card

Таким образом, вы можете предпочитают иметь тип данных SALE_TYPE или PURCHASE_TYPE AS ENUM.

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

Итак, имеющих тип enum данные вашей SALE таблица будет выглядеть следующим образом:

CREATE TABLE `SALE` (
`SALE_ID` int(11) NOT NULL AUTO_INCREMENT , 
`SALE_TYPE` enum('Cash','Card') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , 
`SALE_AMOUNT` decimal(18,4) NULL DEFAULT NULL , 
`CUSTOMER_ID` int(11) NULL DEFAULT NULL , 
PRIMARY KEY (`SALE_ID`) 
) 
ENGINE=InnoDB 
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci 
AUTO_INCREMENT=1 
ROW_FORMAT=COMPACT 
; 

То же должно выполняться для PURCHASE таблицы.

Обратите внимание, что SALE_TYPE перечисление ('Cash', 'карты') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT значение NULL,

Одним словом, я бы за сохранение первоначальной структуры, имеющие небольшое изменение в тип данных вашего *_Type Поле i.e. ENUM.