powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Несколько вопросов
10 сообщений из 10, страница 1 из 1
Несколько вопросов
    #39295797
Megadragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый вечер!
Допустим, стоит задача . Есть три таблицы: Дома (условно назовём H ), Квартиры ( F ) и Счётчики ( M ). Дома могут быть как многоквартирными, так и частными. Счётчики могут быть как на отдельную квартиру, так и на весь дом (и частный, и многоквартирный).
Вопрос : Каким образом лучше организовать связи между данными тремя таблицами?
У меня пока созрели два способа:
1. Сквозной искусственный ключ для домов и квартир.
2. Два внешних ключа в таблице Счётчиков M – на дом и на квартиру. Вероятно, с ограничением типа (на XOR не обращайте внимания, это концепт)
Код: plsql
1.
M.H_ID is null XOR M.F_ID is null


P.S. И ещё несколько мелких вопросов по проектированию БД в общем:
1. Как лучше поступать с простыми естественными ключами (такими как серия+номер паспорта, ИНН, ЕГРПОУ и пр.): делать их первичными, или создавать искусственные, а на ЕК вешать уникальность?
2. Если в некотором столбце типа даты имеют значение только месяц и год (мало ли, точность до числа не нужна), есть ли смысл разделать его на MONTH и YEAR, или лучше повесить ограничение типа
Код: plsql
1.
DAY(..._DATE) = 1

(или иное условное число)?
3. В каком типе лучше хранить МФО, ЕГРПОУ, ИНН и прочие числовые ЕК: целочисленном или строковом? И почему?
4. Есть ли смысл создавать отдельные поля для фамилии, имени и отчества? Для серии и номера паспорта? Для кода города и собственно номера телефона?
P.P.S. Все ответы просьба давать под Oracle 12c и Firebird 3.0, причём желательно отдельно, если они различаются.
...
Рейтинг: 0 / 0
Несколько вопросов
    #39295802
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegadragonЕсть три таблицы: Дома (условно назовём H), Квартиры (F)

"Уже смешно." (с)

У тебя ещё задача не стоит, а таблицы уже есть. Телега впереди лошади.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько вопросов
    #39295816
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Megadragon,

Так, бегло, задачи действительно не видно, даже из далека...

Megadragon Вопрос : Каким образом лучше организовать связи между данными тремя таблицами?
Дом -> Квартира -> Счетчик
- У всех трёх таблиц ключи - естественные счетчики (ID) с авто нумерацией
- Все связи один ко многим (у квартиры есть ID дома, у счетчика есть ID квартиры)
- У счетчика есть ещё уникальный серийник счетчика для директ поиска.
- Если дом частный или всего один счетчик на многоэтажный дом, то квартира в этом доме всего одна и её номер НОЛЬ.



Megadragon1. Как лучше поступать с простыми естественными ключами (такими как серия+номер паспорта, ИНН, ЕГРПОУ и пр.):

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


Megadragon3. В каком типе лучше хранить МФО, ЕГРПОУ, ИНН и прочие числовые ЕК: целочисленном или строковом? И почему?

Строковом - строка, она и в африке строка (нули не пропадут ни с лева ни с права, тире тоже не редкость) - искажается только при принудительном преобразовании

Megadragon4. Есть ли смысл создавать отдельные поля для фамилии, имени и отчества? Для серии и номера паспорта? Для кода города и собственно номера телефона?

Есть, всегда проще собрать чем если приспичит - разделять
...
Рейтинг: 0 / 0
Несколько вопросов
    #39295840
AnSi_Sr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegadragonДопустим, стоит задача . Есть три таблицы: Дома (условно назовём H ), Квартиры ( F ) и Счётчики ( M ). Дома могут быть как многоквартирными, так и частными. Счётчики могут быть как на отдельную квартиру, так и на весь дом (и частный, и многоквартирный).

Добрый день.
Допустим, надо начинать с других сущностей, например, абоненты (физ/юрлица/ТСЖ), индивидуальные приборы учета, общедомовые счетчики, показания приборов в динамике, платежи и т.д.
Взаимоотношения ресурсоснабжающей организации выстраиваются с абонентами, а не с домами/квартирами, т.е. адресная информация в данном случае атрибут сущности "Абонент". Или атрибут "Адрес установки" сущности "Общедомовой прибор учета".
...
Рейтинг: 0 / 0
Несколько вопросов
    #39295873
Megadragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ymagЕсли дом частный или всего один счетчик на многоэтажный дом, то квартира в этом доме всего одна и её номер НОЛЬ.
Именно 0 как число? NULL не прокатит? Всё равно ведь сам по себе номер квартиры не м.б. ключом.
И нельзя ли обойтись без создания таких квартир-пустышек?

ymagне ключи потому, что за владельцем одного паспорта может числиться несколько квартир
По-моему, словосочетание по проектированию в общем в постскриптуме должно было дать понять, что следующие вопросы уже не являются частью ТЗ.
М-да... Хотел не плодить темы, задав все интересующие вопросы в одной, а получилось, что все вопросы привязали к одной задаче.

vmagСтроковом - строка, она и в Африке строка (нули не пропадут ни с лева ни с права, тире тоже не редкость) - искажается только при принудительном преобразовании
А если точно известно, что кроме цифр в таких полях ничего не будет? Всё равно лучше строка с regexp-based ограничением, чем integer?

AnSi_SrДопустим, надо начинать с других сущностей, например, абоненты (физ/юрлица/ТСЖ), индивидуальные приборы учета, общедомовые счетчики, показания приборов в динамике, платежи и т.д.
Взаимоотношения ресурсоснабжающей организации выстраиваются с абонентами, а не с домами/квартирами, т.е. адресная информация в данном случае атрибут сущности "Абонент". Или атрибут "Адрес установки" сущности "Общедомовой прибор учета".
Уж простите, сильно я абстрагировался. Естественно, куда же без таблиц организаций, абонентов, платежей и прочих необходимых...

P.S. Первый блин (в смысле тема) комом, сами понимаете...
...
Рейтинг: 0 / 0
Несколько вопросов
    #39295931
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegadragonИменно 0 как число? NULL не прокатит? Всё равно ведь сам по себе номер квартиры не м.б. ключом.
И нельзя ли обойтись без создания таких квартир-пустышек?

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

Общая задача ведь по прежнему так и не ясна...
...
Рейтинг: 0 / 0
Несколько вопросов
    #39296039
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Megadragon,

Со счетчиками и квартирами - не надо пытаться упрощать. Надо честно смоделировать десяток таблиц "что-то относится к чему-то".

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

Далее, если счетчик общедомовой, то нужно помнить, что в этом же доме могут быть индивидуальные счетчики, показания которых придется вычитать из общедомового. Казалось бы, что сложного? Но если кто-то, кто живет в доме с общим счетчиком, поставит себе индивидуальный счетчик в середине месяца? То есть все эти взаимосвязи нужно разворачивать во времени.
...
Рейтинг: 0 / 0
Несколько вопросов
    #39296053
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Megadragon1. Как лучше поступать с простыми естественными ключами (такими как серия+номер паспорта, ИНН, ЕГРПОУ и пр.): делать их первичными, или создавать искусственные, а на ЕК вешать уникальность?

Первичными - ни в коем случае. Уникальность - разбираться с каждым.

Например, у тебя реестр абонентов, и в нем поле ИНН. Напрашивается желание сделать ИНН уникальным. Но что ты будешь делать, если у одного человека в собственности две квартиры в разных домах? Абонентских счета два, а ИНН один и тот же. Надо либо идти до конца в нормализации, и разделять сущности физлица и абонента, со связью один-ко-многим (что, конечно, правильнее, но так мало кто делает), или плюнуть на неуникальность ИНН.
...
Рейтинг: 0 / 0
Несколько вопросов
    #39296062
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegadragonЕсли в некотором столбце типа даты имеют значение только месяц и год (мало ли, точность до числа не нужна), есть ли смысл разделать его на MONTH и YEAR

Если у тебя есть поля MONTH и YEAR, представь, что тебе нужно сделать выборку "С сентября 2010 по февраль 2012 включительно". Напиши WHERE-условие выборки. Создай индекс для оптимизации этой выборки. А потом сделай то же для поля DATE, сравни сложность.
...
Рейтинг: 0 / 0
Несколько вопросов
    #39296067
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Megadragon3. В каком типе лучше хранить МФО, ЕГРПОУ, ИНН и прочие числовые ЕК: целочисленном или строковом? И почему?


МФО и ЕГРПОУ можно в цифровом, проблем не было, а вот с ИНН засада: если человек по религиозным соображениям не получил ИНН, то вместо него используется серия и номер паспорта. Многие для простоты делают ИНН строковым и в этом случае сажают туда данные паспорта. Некоторые добавляют поле-галку "ИНН не получен по религиозным соображениям", и по нему достают данные из полей паспорта. Как больше нравится?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Несколько вопросов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]