Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];

Вниз

Проектирование БД   Найти похожие ветки 

 
CodeDrunk   (2014-06-25 16:32) [0]

Нужен совет по проектированию БД. К примеру таблице есть поле, которое может иметь одно из нескольких значений, например, статус товара - в наличие, под заказ и нет в наличие. Стоит ли выделять значения в отдельную таблицу?

т.е.

product(.., status_id, ...)

product_status(id, name)

product.status_id --- product_status.id


 
Пит   (2014-06-25 16:38) [1]

стоит


 
DVM ©   (2014-06-25 16:38) [2]


> Стоит ли выделять значения в отдельную таблицу?

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


 
Ega23 ©   (2014-06-25 17:11) [3]

Если количество состояний статуса фиксировано, то может и не стоит, проще на клиенте множество сделать.
Если может расширяться в дальнейшем - выносить в отдельную таблицу.


 
CodeDrunk   (2014-06-25 17:33) [4]

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

Теперь сопутствующий вопрос, какой из паттернов источников данных (Data Mapper, Active Record, Table Data Gateway, Row Data Gateway) разумнее всего  использовать для бзаимодейсвия с бд (нужна поддержка нескольких движков, данный могут храниться и в SQLite и в других форматах).

Склоняюсь к DataMapper, но можно ли его использовать, если в класса маппера будут отсутстовать INSERT, UPDATE и DELETE методы:

 
{ TProduct_Status }

 TProduct_Status = class
 private
   FId: Integer;
   FName: string;
 public
   constructor Create(const Id: Integer; const Name: string);
   property Id: Integer read FId;
   property Name: string read FName;
 end;

 { TProduct_Status_SQLite_Mapper }

 TProduct_Status_SQLite_Mapper = class
 public
   procedure FindAll: TArray<TProduct_Status>;
   procedure FindWithId(const Id: Integer): TArray<TProduct_Status>;
   procedure FindWithName(const Name: string): TArray<TProduct_Status>;
 end;


 
Dennis I. Komarov ©   (2014-06-25 19:25) [5]

Есть/Нет в наличии - это количество на складе
Под заказ - это способ оплаты

Есть склад, есть движение товара (in/out)
Количество товара есть результат его движения
Далее зависит от СУБД и объема данных


 
Кщд   (2014-06-25 19:52) [6]

самая тяжёлая операция в БД - объединение таблиц
серебряной пули нет
поэтому, если есть 100%-ная уверенность, что набор состояний фиксирован(безотносительно того три их или три миллиона), заводить отдельную таблицу не только излишне, но и неэффективно


 
Кщд   (2014-06-25 19:57) [7]

прошу прощения, проглядел: "...нужна поддержка нескольких движков, данный могут храниться и в SQLite и в других форматах..."
прошу считать "Кщд   (25.06.14 19:52) [6]" - недействительным


 
Dennis I. Komarov ©   (2014-06-26 14:08) [8]


> "...нужна поддержка нескольких движков, данный могут храниться
> и в SQLite и в других форматах..."

Угу, судя по контексту она так нужна...


 
Jeer ©   (2014-06-26 15:45) [9]

Ну да, а кто-то не считает западло выносить всю бизнес-логику на сервер + системно-прикладные сущности.


 
Кщд   (2014-06-26 21:03) [10]

>Jeer ©   (26.06.14 15:45) [9]
да, мы такие


 
Dennis I. Komarov ©   (2014-06-26 23:16) [11]

Кому оно надо, в студенческих проектах?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.001 c
2-1403498172
Sakipiel
2014-06-23 08:36
2015.12.20
не отрабатывает событие дабл клик для некоторых компонентов


2-1403717600
Sakipiel
2014-06-25 21:33
2015.12.20
как добавить элемент в наследника TCollection


15-1429522423
pavelnk
2015-04-20 12:33
2015.12.20
По Андроиду


15-1423150223
Дмитрий С
2015-02-05 18:30
2015.12.20
Midi 2 Beep-код


2-1403765627
Вася
2014-06-26 10:53
2015.12.20
Раскраска строк DBGrid относительно значения поля текущей строки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский