Есть таблица "Компаниии" у компаний есть атрибуты АО, ООО, ЧП (формы собственности предприятий). Этих атрибутов небольшое стандартное колличество (я насчитал 5 ). Создавать дополнительную таблицу форм собственности или все формы хранить в таблице "компании"?
не пробовал. А как выводить в выпадающий список ? PHP: $sql = "SELECT форма собственности FROM компании"; $query = mysqli_query($db, $sql); ????? HTML: <select > while($row = mysqli_fetch_array($query)){ <option value =$row[ ??? ] >$row[' ???? ']</option> } </select> И как потом значения таблицы инсертитть? Для пользователя это должно быть так: создайте новую компанию, выберите из выпадающего списка форму собственности. создав компанию из базы выводится : Компания - ООО, "Бука". Подскажите.
Есть такой паттерн проектирования БД - "справочник". Когда такие вот константные данные, как у тебя, выносятся в отдельную таблицу, а везде, где нужны оттуда строки, мы ссылаемся на строки справочной таблицы по ID. Что с этого имеем: 1) Исключается человеческий фактор при заполнении константных данных. Вот тебе пример: ООО и OOO. Выглядят одинаково. А на деле одно из них некорректно. А может быть все проще, может быть банальная опечатка. И ладно, если это поле просто выводится "как есть", но оно же может участвовать в выборке, и тогда выборка будет некорректной. 2) Упрощается индексирование колонки, ссылающейся на справочную таблицу. 3) Выборки по этой колонке будут быстрее. Сравнение чисел всегда работает быстрее сравнения строк или LIKE оператора. 4) Больше контроля в огромных запросах, которые, вполне возможно, будут. 5) Таки на руках есть отдельная таблица со списком используемых значений, которая, в отличие от ENUM-типа, расширяемая. Завтра введут новый вид собственности(маловероятно, но все же), и, в случае с ENUM-типом, придется альтить таблицу, хранящую все данные. А тут просто надо добавить одну строчку. Минусы: 1) В простом select * from вместо надписи "ООО" будет число. Лечится JOIN-ами, либо вложенными селектами в запросе. Смотря что больше подходит под конкретную ситуацию.
Да, вижу что проще использовать лишнюю таблицу. Во всяком случае на моем уровне. Статью полезную нашел про enum http://pushorigin.ru/sql/enum-evel основная боль , это корреткно выводить данные из enum , насколько я понял. А как мне быть, когда понадобится вносить : "мужчина", "женщина"? вписать в коде в выпадающем списке или тоже таблицу с двумя значениями создавать?
Ну...вероятность появления новых полов чуть ниже вероятности появления новых видов собственности, хотя кто знает, мб у нас трансгендеры отдельный пол заимеют официально через N лет.. Но тут, пожалуй, целесообразно использовать ENUM. Хотя, в общем-то, создание отдельной таблицы, пусть и для двух вариантов, никому жизнь не испортит. Само по себе наличие таблицы в БД ни на чем не сказывается, если ты этого боишься. А вот архитектура БД становится прозрачнее. Те же ENUM-ы не столь очевидны, когда смотришь на диаграмму в том же workBench, из которого ты скинул скриншот. --- Добавлено --- И да, надеюсь, у тебя кириллические имена таблиц и полей только для скриншота? Если у тебя такое в проекте - то это кррррайне нежелательная хурма. Избегай ее по возможности. Названия лучше писать на латинице. В идеале - на английском. Не знаешь английский, тогда учи хотя бы транслитом. Но либо так либо так. Смешивать транслит с инглишем не надо, даже если будет сильное желание.
Да, это только для примера. На данном этапе у меня хватает знаний чтоб не создавать таблицы названные кириллицей. Да здравствуют таблицы! Создам таблицу sex с двумя значениями.
с трёмя. От тебя не убудет, если их будет "мэ", "жо" и "прочее", правда? =) зато все буду довольны, даже те, кто тупо не хочет тебе сообщать пол.