• Как канонично организовать структуру таблиц в базе данных MySQL?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Вот Вам пример сильно нормализованной модели под заявленные хотелки (насколько я их понял).
    e480bdfe4acd4f2c9887ed7f6970beb6.png
    SET FOREIGN_KEY_CHECKS=0;
    
    CREATE TABLE department
    (
    	id INT NOT NULL,
    	name VARCHAR(50) NOT NULL,
    	PRIMARY KEY (id)
    ) 
    ;
    CREATE TABLE department_property
    (
    	department_id INT NOT NULL,
    	property_id INT NOT NULL,
    	UNIQUE KEY UQ_department_property_department_id_property_id(department_id, property_id)
    ) 
    ;
    CREATE TABLE employment
    (
    	id INT NOT NULL,
    	worker_id INT NOT NULL,
    	plant_id INT NOT NULL,
    	PRIMARY KEY (id),
    	UNIQUE KEY UQ_employment_worker_id_plant_id(worker_id, plant_id)
    ) 
    ;
    CREATE TABLE employment_department
    (
    	employment_id INT NOT NULL,
    	department_id INT NOT NULL,
    	UNIQUE KEY UQ_employment_department_employment_id_department_id(employment_id, department_id)
    ) 
    ;
    CREATE TABLE plant
    (
    	id INT NOT NULL,
    	name VARCHAR(50) NOT NULL,
    	PRIMARY KEY (id)
    ) 
    ;
    CREATE TABLE property
    (
    	id INT NOT NULL,
    	name VARCHAR(50) NOT NULL,
    	value VARCHAR(50) NOT NULL,
    	PRIMARY KEY (id)
    ) 
    ;
    CREATE TABLE worker
    (
    	id INT NOT NULL,
    	name VARCHAR(50) NOT NULL,
    	PRIMARY KEY (id)
    ) 
    ;
    SET FOREIGN_KEY_CHECKS=1;

    Но, как уже сказали, нормализация не является самоцелью! С запросами к этой модели у программиста уже возникнет некоторая Камасутра, а будут ли они оптимальны по перформансу - вообще отдельная тема. Так что, не устану повторять: оптимизация структуры БД заключается не в достижении максимально возможной NF, а в том, чтоб на ней оптимально выполнялись именно те запросы, которые на ней должны выполняться ))
    Ответ написан
    5 комментариев
  • Стоит ли ставит unsigned для полей в MySQL?

    Stalker_RED
    @Stalker_RED
    Сперва вы смотрите непонятно какие уроки, а затем удивляетесь.

    Use the UNSIGNED attribute if possible to allow a greater range.
    © https://dev.mysql.com/doc/refman/5.7/en/example-au...

    Потому, что им лень прописать UNSIGNED? Потому, что сейчас гайды делают даже нубы?
    Или может потому, что не хотят забивать головы новичков лишними подробностями? Вы действительно думаете что ваша база очень скоро превысит 2 млрд записей и вам понадобятся все 4?
    Если да, то вот вам подсказка: с BIGINT можно еще в 4 млрд раз поднять планку.
    Ответ написан
    Комментировать
  • Почему после замены /tmp на симлинк mysql перестаёт работать через unix сокеты?

    tmpfs on /tmp type tmpfs (rw,nosuid,nodev)

    И чего вам без приключений для жопы не живётся?
    Ответ написан
    1 комментарий