Как сохранить в базе данных информацию о заказе? - PullRequest
0 голосов
/ 17 августа 2011

У меня есть таблица с картой, которая описывается следующими атрибутами

База данных: Oracle 11g

Они USER_TABLE для многих (- <) CARD

CARD

id NUMBER PK
name VARCHAR
card_number NUMBER
USER_ID NUMBER USER_TABLE FK

Вероятно, в таблицах будет храниться около 20 миллионов записей

В моем приложении пользователь (from the table USER_TABLE) может определить порядок, назначенный каждой карточке.

Карточки путем скачивания через запрос: SELECT * FROM CARD WHERE USER_ID =?

Моя идея решить проблему заказа:

1-й НОМЕР ЗАКАЗА добавив атрибут, который будет определять порядок.К сожалению, после изменения порядка я должен обновить все пользовательские записи.

2nd Добавление двух атрибутов PREF NUMBER NEXT NUMBER.Я немного прибавляю к операциям, когда положение карты меняется на единицу, но в худшем случае я обновляю все пользовательские карты.

У меня следующие вопросы:

Как устранить проблемублокировки в таблице?

Есть ли лучший способ решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

Сделайте ваш код заказа FLOAT. Затем вы можете изменить значение, чтобы оно было между двумя ранее существовавшими значениями.

myID  myDataID  myOrder   =>   myID  myDataID  myOrder
 1       1        1.0     =>    1       1        1.0
 1       2        2.0     =>    1       2        2.0
 1       3        3.0     =>    1       3        1.5

MyDataID 3 теперь переместился с третьего на второе. И мне не пришлось обновлять значения myOrder для любых других записей.

1 голос
/ 17 августа 2011

Большая часть сортировки выполняется по схеме, основанной на атрибуте реальной таблицы - первичный ключ, дата создания, зарплата. Иногда возникает необходимость нарушить схему сортировки по деловым причинам. Классическим примером являются выпадающие списки СТРАН на веб-сайтах: все страны перечислены в алфавитном порядке, за исключением Соединенных Штатов, которые идут первыми. Это отражает размер и важность американской клиентской базы (по крайней мере, для англоязычных веб-сайтов).

В мире всего 196 стран (ну, , вероятно, ), так что было бы не слишком сложно навязать схему произвольной сортировки всем, а не только США. Но действительно ли ваш пользователь назначит предпочтительный порядок сортировки для каждой из ~ 20 миллионов записей? Это кажется маловероятным. Вероятно, им нужен автономный порядок сортировки с возможностью переопределения для определенных предпочтительных записей (например, код страны для США).

Если это так, то вам нужен один столбец , который необязателен . Пользователь назначает преференциальный порядок для записей, которые ему небезразличны, а остальные оставляются по умолчанию, скажем, с уникальным порядком ключей. Как это:

select * from big_table
order by nvl2(overriding_sort_order, 9999), uniquw_key
/

Конечно, если пользователь хочет изменить overriding_sort_order для одной записи, ему придется обрабатывать пульсации вверх / вниз - или вам придется обрабатывать это для них. Дело в том, что затрагивается только относительная горстка записей, а не вся таблица.


«А как насчет порядка предпочтения? 3 кредитных карты, по которым я заказываю предпочитаю использовать. Или список DVD, показывающий, что я предпочел бы получить следующий. "

Порядок предпочтений для отдельного пользователя - это другой бизнес-пример. «Три кредитные карты» - это отличный пример от «20 миллионов» записей, приведенных в первоначальном вопросе.

Итак, давайте поговорим о вашем примере с DVD. Вы не заказываете весь инвентарь LoveFilm, вы создаете таблицу, которая идентифицирует и сортирует очень маленький набор доступных DVD-дисков для каждого пользователя: что-то вроде:

USER_WISH_LIST
--------------
User_id
DVD_id
Preferred order

Количество DVD, которое будет указывать каждый пользователь, вероятно, будет небольшим или около того, поскольку порядок сортировки применяется только к выбранным пользователем DVD-дискам. Таким образом, накладные расходы на перенастройку столбца PREFERRED_ORDER, если пользователь решит, что они хотят посмотреть Улыбка Моны Лизы до Соломенные псы и после Helvetica , а не после Johnny Mnemonic и до Man on Wire , отлично управляемы.

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