Я думал добавить idcustomer как auto_increment, но я не уверен, что это будет отличная идея.
Это действительно хорошая идея.
Другие ваши столбцы (атрибуты) не обязательно имеют уникальные значения.Другими словами, они не подходят для использования в качестве естественных первичных ключей.Какое значение может работать как естественный первичный ключ?Номер сотрудника, возможно.Серийный номер продукта может работать.Идентификационные номера налогоплательщиков (номера социального страхования) не работают: удивительное количество людей по ошибке используют дубликаты номеров.Стандарт уникальности для выбора элемента реального мира в качестве первичного ключа настолько высок, что большинство разработчиков баз данных даже не пытаются.
Таким образом, создание гарантированного уникального первичного ключа обычно является хорошим дизайном.Жаргон для этого типа ключа - суррогатный первичный ключ.Большинство систем СУБД, включая MySQL, предоставляют для этого автоинкрементные числа.
Вы можете выбрать одно из двух соглашений для присвоения имени id
значению.Один должен назвать это id
.Другой - назвать его customer_id
(имя таблицы с добавленным _id
).Второй поможет вам разобраться, когда вы начнете использовать эти значения в других таблицах для установления отношений.
Например, у вас может быть таблица продаж.Эта таблица может иметь следующие столбцы:
sales_id autoincrementing pk
customer_id the id of the customer to whom the sale was made. (foreign key)
item_sold description of the item
list_price
discount
net_price
Вы поняли идею.Читайте о первичных ключах и внешних ключах .В жаргоне «логического проектирования баз данных» вы можете прочитать о сущностях (клиент, продажи) и взаимосвязях .Каждая таблица получает свою собственную серию автоинкрементных значений.
Затем можно использовать запрос, подобный этому, чтобы узнать продажи каждому клиенту.
SELECT customer.name, customer.first_lastname,
COUNT(sales.sales_id) number_of_sales,
SUM(sales.net_price) revenue
FROM customer
JOIN sales ON customer.customer_id = sales.customer_id
GROUP BY customer.customer_id, customer.name, customer.first_lastname
Здесь sales
Сущность имеет отношение многие-к-одному с customer
сущностью .Это достигается наличием атрибута customer_id
в каждой строке sales
, указывающей на клиента.
Также принято указывать id в первом столбце каждой таблицы.
Условные обозначения хороши: они помогают следующему человеку взглянуть на ваше приложение.Они также помогут вам в будущем.
Примечание : моя таблица продаж является лишь примером, показывающим, как автоинкрементные значения идентификаторов могут быть полезны.Я не утверждаю, что это хороший макет для реальной таблицы продаж: это не так.