Помогите мне с дизайном БД - PullRequest
0 голосов
/ 20 мая 2010

Я занимаюсь разработкой системы текстовых объявлений. Небольшой клон Google Ads

Обновлено изображение, чтобы были видны все имена полей если вы не видели диаграмму, нажмите здесь

альтернативный текст http://img41.imageshack.us/img41/5351/dbdiagram.png

Вот диаграмма с общими таблицами. Короче говоря, рекламодатель может иметь до 10 вариантов одной и той же кампании с различными вариантами текста, может геотаргетировать свои объявления и рассчитывать уникальные показы только для IP-адресов, которые не были на определенном сайте более 24 часов.

Довольно просто, но вопрос в том, чего мне здесь не хватает, исходя из вашего опыта, потому что позже будет гораздо сложнее исправить недостатки дизайна, и некоторые из вас, вероятно, сделали что-то похожее, а также многие гуру SQL здесь, так что, возможно, я справился с нормализованной БД или сделал не нормируется как нужно?

Второй вопрос. Моя конечная цель - получить рекламу для пользователя от ie. Германия, которая не видела одно и то же объявление на одном и том же сайте 24 часа, если реклама соответствует стране пользователя. Каждое показание считается таким же, как и каждый клик, если он есть. Мне нужно получить 5 «случайных» объявлений на основе IP, страны и более высокой цены за клик (оплата за клик) Как я могу добиться этого с текущим дизайном или, может быть, создать базу данных так, как было бы легко получать рекламу и показывать статистику для адвокатов ...

спасибо за любую помощь ...

Ответы [ 2 ]

1 голос
/ 20 мая 2010

В целом все выглядит хорошо, я бы сделал несколько небольших изменений, если бы это был я:

Я заметил, что у вас есть ID региона в вашей таблице стран, но нет таблицы регионов. Если таблицы регионов нет, что мешает вводить неправильные (отрицательные?) Идентификаторы регионов?

Аналогично, статус кампании в таблице текстовых кампаний - это Tinyint. Это Enum хранится? Если это так, рассмотрите таблицу состояний, так как это предотвратит ввод состояний, которых нет в вашем Enum, что может привести к сбою в вашем коде, так как вы пытаетесь преобразовать их, когда вы читаете их обратно.

То же самое снова со статусом пользователя в таблице «Пользователи».

Идентификатор страны в таблице стран - целое число, достаточно TinyInt.

У вас есть цифры бюджета в виде целых чисел, поэтому невозможно составить бюджет в копейку / цент / и т. Д., Или они измеряются в второстепенных разделах?

Похоже, вы планируете хранить пароли в виде простого текста? Подумайте о том, чтобы засолить и хэшировать пароли, а затем хранить только эти - или вы планируете использовать прозрачное шифрование.

В зависимости от того, как долго вы планируете его запускать, VARCHAR (15) будет недостаточно для сохранения IP-адреса в IPv6.

Если у вас есть SQL 2008, вы можете использовать тип DATE в таблице «Ежедневная статистика текстовой кампании», а затем сделать «Дата» и «Идентификатор варианта текста кампании» в первичном ключе.

Вы можете добавить некоторые поля в таблицу вариантов текстовой кампании, например «Дата с» и «Дата до», чтобы люди могли заранее настроить кампании. Аналогично, время начала и время остановки могут позволять показывать кампании в определенное время дня.

Я мог бы поменять имена, так что текстовая кампания - это просто кампания и т. Д. - Возможно, вы захотите проводить видео или графические кампании в будущем?

Есть и другие вещи, но пока этого достаточно. Я хотел бы знать, если у вас есть доступное примерное использование? Может помочь с определением большего для оптимизации.

0 голосов
/ 20 мая 2010

Лучше, чтобы имя всех первичных ключей было идентификатором, а в столбце внешнего ключа - например, PrimaryTable + ID.

например, имя первичного ключа в таблице Users должно быть идентификатором, а связанный с ним внешний ключ в таблице TextCampaigns должен быть UserID.

это только мое мнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...