Опыт имеет большое значение, но с точки зрения дизайна таблиц вы можете многое узнать из того, как работают ORM, такие как Hibernate и Grails, чтобы понять, почему они делают что-то. К тому же:
Храните разные типы данных отдельно - не храните адреса в таблице заказов, например, ссылку на адрес в отдельной таблице адресов.
Мне лично нравится иметь целочисленный или длинный суррогатный ключ в каждой таблице (которая содержит данные, а не те, которые связывают разные таблицы вместе, например, отношения m: n), которые являются первичным ключом.
Мне также нравится иметь созданный и измененный столбец временных меток.
Убедитесь, что каждый столбец, который вы делаете "where column = val" в любом запросе, имеет индекс. Возможно, не самый совершенный в мире индекс для типа данных, но, по крайней мере, индекс.
Настройте свои внешние ключи. Также настройте правила ON DELETE и ON MODIFY, где это уместно, для каскадирования или установки нуля, в зависимости от структуры вашего объекта (так что вам нужно удалить только один раз в `` голове '' вашего дерева объектов, и все подобъекты этого объекта получат удаляется автоматически).
Если вы хотите разделить свой код на модули, вы можете захотеть сделать модульную схему своей БД - например, это область «клиенты», это область «заказы», а это область «продукты», и использовать таблицы соединения / связывания. между ними, даже если они отношения 1: n, и, возможно, дублируют важную информацию (например, дублируют название продукта, код, цену в вашей таблице order_details). Прочтите о нормализации.
Кто-то другой порекомендует прямо противоположное для некоторых или всего вышеперечисленного: p - никогда не бывает единственно верного способа делать некоторые вещи, а!