Попытка разработать / смоделировать простое приложение базы данных - PullRequest
1 голос
/ 10 января 2009

Я пытаюсь узнать больше о взаимодействиях с БД, в результате чего я начал разработку локального приложения. Ну, в основном, то, что я сделал до сих пор, дало смешанные результаты, и я изменил так много вещей, что я даже не уверен, что я изменил на этом этапе, смеется. Я не совсем уверен, что одна из моих таблиц была правильной, поэтому я решил начать все сначала. Вот что я хочу сделать от своего глупого локального приложения.

  • Сохранение до 9 определенных RSS-каналов (я раньше делал URL / ссылки, но я не хочу, чтобы что-то делало раньше, поэтому я изменяю их на RSS-каналы)
  • 1 канал будет заполнен по умолчанию (поэтому у каждого пользователя есть один общий канал - который он может изменить)
  • Ленты должны храниться в некоторой схеме заказа, чтобы их можно было извлекать / распечатывать в том же порядке, в котором они были введены.

Появится экран редактирования с 9 текстовыми полями, заполненными соответствующими записями в БД, что-то вроде:

feed 1: <input type="text" value="http://rss.news.yahoo.com/rss/topstories"> **the default feed for everyone, but they can change it**
feed 2: <input type="text" value="http://content.usatoday.com">
feed 3: <input type="text" value="http://newsrss.bbc.co.uk/rss/newsonl.../world/rss.xml">
feed 4: <input type="text" value="">
feed 5: <input type="text" value="">
feed 6: <input type="text" value="">
feed 7: <input type="text" value="">
feed 8: <input type="text" value="">
feed 9: <input type="text" value="">
        <input type="submit" value="update">

Я хочу иметь возможность редактировать / добавлять новые каналы здесь и извлекать эти каналы в том же порядке - это было большим источником моего замешательства в моей предыдущей попытке.

Появится экран вывода, который выводит URL-адреса фидов в том же порядке.

У меня есть 2 таблицы, пользователи и теперь фиды , я считаю, что моя таблица пользователей в порядке, в ней в основном хранится немного личной информации. Я думаю, что все должно быть довольно очевидно. Столбец 'state' будет содержать двухсимвольную аббревиатуру состояний из списка выбора / выпадающего списка, и я проиндексировал ее, так как я хотел бы иметь возможность искать пользователей по состоянию. У меня нет проблем с получением / редактированием / обновлением этих данных.

CREATE TABLE users (
    user_id              SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    first_name           VARCHAR(20) NOT NULL,
    last_name            VARCHAR(40) NOT NULL,
    state                CHAR(2) NOT NULL,
    email                VARCHAR(60) NOT NULL,
    pass                 CHAR(32) NOT NULL,
    registration_date    DATETIME NOT NULL,

    PRIMARY KEY(user_id),
    UNIQUE (email),
    INDEX login (email, pass),
    INDEX state (state)                              
);

Вот моя новая таблица фидов

CREATE TABLE feeds (
    user_id      SMALLINT UNSIGNED NOT NULL,
    feed_url     VARCHAR(255) NOT NULL DEFAULT 'http://rss.news.yahoo.com/rss/topstories',
    feed_id      SMALLINT UNSIGNED NOT NULL DEFAULT 1,

    PRIMARY KEY(user_id, feed_url)                                                                          
);

Когда пользователь вводит новый фид, скажем, для фида №2, значение будет вставлено в feed_url, а feed_id будет вставлено со значением 2 . Если введен канал № 3, будет добавлен feed_id со значением 3 . Это должно дать мне что-то для ORDER BY, чтобы получить записи в порядке, верно?

Экран редактирования данных должен всегда отображать каналы, как они были введены.
Экран вывода данных должен всегда отображать каналы, как они были введены.

Итак, это выглядит правильно, и я что-то упускаю? Возможно, мой feed_url VARCHAR (255) не является надежным, но я собираюсь проводить тестирование только с короткими URL-адресами. Это тоже всегда можно легко поднять.

Ответы [ 3 ]

1 голос
/ 10 января 2009

Поскольку ваша таблица каналов будет содержать каналы для всех ваших пользователей, вам, возможно, придется переосмыслить это.

Вы установили значение по умолчанию 1 для feed_id, поэтому вы получите 1 за все - вы не получите 2 при добавлении второго фида для пользователя. Вам понадобится логика.

Возможно, когда пользователь создает новый канал, вы запрашиваете все его записи, находите самый высокий идентификатор канала и затем добавляете к нему 1. Тогда вы будете использовать это для нового идентификатора канала.

Чтобы найти ваш самый высокий идентификатор, вы должны сделать что-то вроде (синтаксис может быть неправильным, я обычно к T-SQL)

выберите максимум (feed_id) из каналов, где user_id = @ user_id

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

0 голосов
/ 27 января 2009

Чтобы обеспечить возможность, чтобы у каждого пользователя был исходный канал по умолчанию, который он может изменить, я рекомендую вам удалить значения по умолчанию из таблицы feeds и реализовать функцию в своем коде приложения. В своем коде для создания (регистрации) нового пользователя добавьте строку в таблицу users, затем добавьте строку в таблицу feeds, которая содержит первый фид для этого пользователя с URL-адресом по умолчанию (который вы можете сохранить в настройки конфигурации приложения).

Если вы должны поддерживать порядок каналов, то есть два основных варианта. Используйте столбец feed_id, но заполните его как автоинкремент. Тем не менее, это может сломаться при определенных сценариях (не всегда будет расти). Другой вариант - изменить feed_id на feed_sequence и заполнить его из своего кода, чтобы всегда было 1-9 для каждого пользователя.

Я считаю, что ваше требование сохранить порядок URL фидов, по-видимому, любой ценой, довольно нетипично. Зачем это нужно и почему это так важно?

Я заметил пару проблем с вашей таблицей users. Во-первых, поле email недостаточно велико (60 - это путь к маленькому, 320 - реальный максимум, я думаю). Во-вторых, мне интересно, храните ли вы pass в виде простого текста, что было бы серьезной проблемой безопасности. Я также заметил, что pass объявлен как CHAR, а не VARCHAR. Вы не говорите, но означает ли использование CHAR, что вы НЕ храните пароль в виде открытого текста, а вместо этого запутываете его в поле фиксированного размера (32)?

Конечно, URL фида могут также легко превышать 255 символов.

Приятно видеть, что вы достаточно нормализовали свои данные, например, НЕ указав feedUrl1 ... feedUrl9 столбцов.

С наилучшими пожеланиями.

0 голосов
/ 10 января 2009

Забудьте об этом последнем посте - я подумал, что вы должны иметь возможность изменить порядок своих каналов. Если нет, вам просто нужно добавить auto_increment в это поле feed-id. Затем используйте ORDER BY feed-id по возрастанию.

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