У меня есть следующая проблема, связанная с сортировкой базы данных, которая была, когда я начал нечестивое сочетание Mysql, написанное вручную из заметок конверта, таблицу Excel и полностью отсутствующие записи (не спросите) Я теперь уменьшил проблему до следующего.Плохой дизайн MYSQL и как его улучшить
У меня есть 4 таблицы в значительно упрощенном виде они являются: -
customers
---------
id int not null primary key,
name varchar(50)
users
---------
id2 int not null primary key,
name varchar(50)
address
-------
id int,
id2 int,
country varchar(50)
product
-------
id int,
id2 int,
item varchar(50)
Образец данных:
Примеры выбора * от клиентов;
+----+------+
| id | name |
+----+------+
| 1 | Fred |
+----+------+
выбрать * от пользователей;
+----+---------+
|id2 | name |
+----+---------+
| 1 | Wilma |
| 2 | Pebbles |
+----+---------+
выбрать * с адреса;
+----+-----+---------+
| id | id2 | country |
+----+-----+---------+
| 1 | 1 | Bedrock |
| 1 | 2 | Bedrock |
+----+-----+---------+
выбрать * из продукта;
+----+-----+---------+
| id | id2 | item |
+----+-----+---------+
| 1 | 1 | Item1 |
| 1 | 2 | Item2 |
+----+-----+---------+
customers.id является первичным ключом и ссылки на address.id и product.id
users.id2 является первичный ключ и ссылки на address.id2 и product.id2
Этот несоответствие соглашения, когда более одного пользователя разделяет адрес с клиентом, единственным способом обойти это в настоящее время является дублирование записи по адресу и изменение номера id2. В настоящее время это влияет только на один случай в базе данных.
В тех случаях, когда пользователи не обмениваются адресами с клиентом, я не могу работать над оператором select, который будет определять имя Клиента, адрес клиентов, имя пользователя и адрес пользователей. Эта ситуация относится к приблизительно 30% записей.
Любые предложения по сортировке этого хаоса будут наиболее желанными.
Ричард
Возможно, вы упростили некоторую важную информацию. Одна из вещей, которые вы сказали, была: «Эта схема не работает, когда более одного пользователя разделяет адрес с клиентом». Если id2 является первичным ключом для пользователей, и единственный способ связать пользователей с адресом - через id2, то как несколько пользователей могут использовать один и тот же адрес? Я также не понимаю, что такое отношение между продуктами и другими таблицами - есть ли таблица отсутствующих заказов? Кроме того, можете ли вы подтвердить, является ли это учебным заданием/домашним заданием или является ли это коммерческой системой? –
Пусть это станет уроком для всех нас, чтобы никогда не называть что-то 'id2'. – tadman
Это сортировка записей для моего старого друга, который регулярно управляет своим бизнесом под рукой и по моему опыту в основном потерял записи. Это для бизнеса, но он, конечно, ничего не будет платить. – user2223659