Попытка заставить схему выглядеть как бланк
Существует несколько версий этой ошибки. Наиболее легкой для восприятия является простая форма карточки учета прихода на работу и ухода с работы, которая создана в точном соответствии со своим бумажным вариантом:
CREATE TABLE Timecards (user_id CHAR(8) NOT NULL, punch.time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, event.flag CHAR(3) DEFAULT 'IN' NOT NULL CHECK(event_flag IN ('IN','OUT')),PRIMARY KEY (user_id, punch_time));Чтобы такая схема давала ответы даже на основные запросы, необходимо согласовать между собой времена прихода и ухода. Кодд (1979) писал, что строка в СУБД должна соответствовать факту. Важно понимать, что речь идет о полном факте, а не о его половине. В данном случае неполнота заключается в том, что одного появления Джона на работе в 09:00 недостаточно, чтобы рассчитать размер его заработка в этот день. Для этого необходимо знать, что Джон был на работе с 09:00 до 17:00. При правильном описании таблицы в каждой ее строке должен быть заключен полный факт. В нашем случае это должно выглядеть так:
Многие начинающие SQL-программисты боятся использовать пустые значения (NULL), но здесь они весьма кстати. Мы не знаем будущего и потому не можем заранее присвоить содержательное значение атрибуту out_time.
Другой пример — бланк заказа, напрямую перенесенный в DDL В общих чертах, он обычно выглядит так:
Итоговая сумма заказа order_Total может быть рассчитана на основании данных таблицы OrdersDetails, и потому присутствие этого атрибута в таблице Orders является избыточным. Однако ячейка для общей суммы заказа присутствует в бумажном варианте бланка и добросовестно переносится новичками в определение таблицы.
Никто не покупает и не продает номер строки. Покупатели заказывают товар. Но в бумажном бланке заказа строки нумеруются. По аналогии номера строк line_nbrприсутствуют и в таблице OrderDetails. Это неудобно, потому что, если указать один и тот же товар в нескольких строках, в дальнейшем необходимо будет их консолидировать. Иначе заказчик рискует, например, лишиться оптовой скидки, да и дисковое пространство из-за избыточных данных тратится впустую.
При этом каждая строка отражает неполный факт. Например, в одной строке указано, что я заказал две пары туфель, а в другой строке этого же заказа указано, что я заказал три пары туфель. Полный же факт заключается в том, что я заказал пять пар туфель.
В 2004г. я указал на это одной программистке, разрабатывавшей схожую схему. Она настойчиво уверяла, что им необходима нумерация строк, чтобы была возможность в точности восстановить бланк заказа в его первоначальном виде. Но далее в той же теме она жаловалась, что ее сослуживцы тратили по несколько часов в день для проверки количества заказанных товаров, поскольку их поставщики не использовали подходящую модель для представления обобщенных и отсортированных данных.
ПРИЛОЖЕНИЕ 1
Военные стандарты
DoD 8320.1 -М-1, процедуры стандартизации элементов данных.
DoD Directive 8320.1, администрирование данных Министерства обороны США.
http://www.dtic.mil/whs/directives/corres/html/83201.htm.
http://www.abelia.com/498pdf/498ARAPX.PDF.
Стандарты метаданных
По этому адресу Вы найдете краткий обзор правил комитета по стандартам метаданных NCITS L8:
— http://pueblo.lbl.gov/~olken/X3L8/drafts/draft.docs.html.
— http://lists.oasis-open.org/archives/ubl-ndrsc/200111/msg00005.html. Адрес PDF-файла:
— http://www.oasis-open.org/committees/download.php/6233/c002349_ISO_IEC_l 1179.
Предварительный вариант:
— http://www.iso.org/iso/en/ittf/PubliclyAvailableStandards/c002349_ISO_IEC_l1179-l_1999(E).zip.
Стандарты ANSI и ISO
— Основы СИ (Метрической системы).
— ISO 31 “Quantities and Units (14 parts)”.
— ISO 1000 “SI Units and Recommendations for the Use of Their Multiple andof Certain Other Units for the Application of the SI”.
— ISO 2955 “Information Processing — Representation of SI and Other Unitsfor Use in Systems with Limited Character Sets”.
Справочник по стандартам ISO 31 и ISO 1000 можно приобрести по адресу:
— http://www.iso.org/iso/en/prods-services/prods-services/otherpubs/Quality.PublicationList?CLASSIFICATION=HANDBOOKS#090201.
— ISO 639-1:2002 “Codes for the Representation of Names of Languages —Part 1: Alpha-2 Code”.
— ISO 639-2:1998 “Codes for the Representation of Names of Languages — Part 2: Alpha-3 Code”.
Коды языков доступны по адресу:
— http://www.loc.gov/standards/iso639-2/iso639jac.html.
— ISO 3166 “Codes for the Representation of Names of Countries”.
Этим стандартом за каждой страной закреплен уникальный двухбуквенный код. Для решения каких-либо специфических задач предлагается трехбуквенный код. В качестве альтернативы предложен также трехразрядный числовой код — для приложений, которым нужна независимость от алфавита или экономное расходование памяти.
— http://www.iso.org/iso/en/prods-services/popstds/countrynamecodes.html.
— ISO 4217:2001 “Codes for the Representation of Currencies and Funds”.
— http://www.iso.org/iso/en/prods-services/popstds/currencycodeslist.html.
— IBAN: International Standard Bank Number.
— http://www.ecbs.org/iban/iban.htm.
— ISO 8601 “Data Elements and Interchange Formats — InformationInterchange — Representation of Dates and Times”.
— http://www.iso.org/iso/en/prods-services/popstds/datesandtime.html.
Коды правительства США
— NAICS: North American Industry Classification System Система кодов, пришедшая на смену старой системе (SIC).
— http://www.census.gov/epcd/www/naics.html.NAPCS: North American Product Classification System.
— http://www.census.gov/eos/www/napcs/napcs.html
— TIGER: Topologically Integrated Geographic Encoding and Referencingsystem. Представление географических данных для переписей. Доступнов электронной форме.
DOT: словарь профессий. Система кодов министерства труда США. Некоторые коды приведены здесь:
— http://www.wave.net/upg/immigration/dot_index.html.
Розничная торговля
— EAN: European Article Number, now combined with the UPC codes
— ISO/IEC 15418:1999 “EAN/UCC Application Identifiers and Fact Data Identifiers and Maintenance”.
— ISO/IEC 15420:2000 “Automatic Identification and Data Capture Techniques — Bar Code Symbology Specification — EAN/UPC”.
— Статья Стива Лора (Steve Lohr) “Bar Code Detente: U.S. Finally Adds One MoreDigit” в выпуске New York Times от 12 июля 2004 Г: http://www.nytimes.com/2004/07/1 2/business/12barcode.html?ex=1090648405&ei=l&en=202cb9baba72e846.
— VIN: код идентификации транспортного средства
— ISO 3779:1983 Vehicle Identification Number (VIN).
— ISO 4030:1983 Vehicle Identification Number (VIN) — расположение и крепление.
— ISO/TR 8357:1996 Инструкции по реализации назначения всемирного идентификатора производителя (world manufacturer identifier, WMI) для системы кодов VIN и для всемирного идентификатора производителя комплектующих (world parts manufacturer identifier, WPMI) — только на английском языке.
Хорошая статья о грядущих изменениях в VIN:
— http://www.cars.com/news/stories/070104_storya_dn.jhtml?page=newsstory&aff=national.
Объяснение стандартов ISO для автомобильных покрышек:
— http://www.hostelshoppe.com/tech_tires.php.
ISBN: International Standard Book Number
— http://www.isbn.org/standards/home/index.asp.
На сайте имеется программа преобразования для нового 13-разрядного ISBN, основанная на переходе от 10-разрядных кодов UPC к 13-разрядным кодам EAN.
Оформление кода и правила назначения имен
Другие мнения вы найдете по следующим адресам:
— http: //www. sqlservercentral.com/columnists/sjones/codingstandardspart2formatting.asp.
— http://www.sqlservercentral.com/columnists/sjones/codingstandardspart1formatting.asp.
— Gulutzan, P. “SQL Naming Conventions”,
http://dbazine.com/gulutzan5.shtml.
— Bryzek, M. “Constraint Naming Standards”,
http://ccm.redhat.com/doc/core-platform/5.0/engineering-standards/eng-standards-constraintnaming-sect-l.html.
— Celko, J. “Ten Things I Hate about You”,
http://www.intelligententerprise.com/O01205/celkol_l.jhtml?_requestid=304726.
— ISO/IEC. IS 11179-5 Information Technology Specification and Standardization of Data Elements: PART 5, Naming and Identification Principles forData Elements.
— http://metadata-standards.org/Document-library/Draft-standards/l 1179-Part5-Naming&Identification/.
— Jones, S. “Standards Part 1 — Abbreviated Programming”,
http://www.databasejournal.com/features/mssql/article.php/1471461.
— Karbowski, J.J. “Naming Standards beyond Programming”, http://www.devx.com/tips/Tip/12710.
— Koch, G., and K. Loney Oracle8i: The Complete Reference (3rd ed.). Emeryville,CA: Osborne McGraw Hill, 2000.
— Kondreddi, N., Vyas. “Database Object Naming Conventions”,
http://vyaskn.tripod.com/object_naming.htm.
— Mullins, C. “What's in a Name?”, http://www.tdan.com/i004fe02.htm.
— Mullins, C. http://www.craigsmullins com/dbt_0999.htm.
— Sheppard, S. “Oracle Naming Conventions”, http://www.ss64.com/orasyntax/naming.html.
ПРИЛОЖЕНИЕ 2
Библиография
Вудворт (1938) — Woodworth, R.S. Experimental Psychology. New York: Holt,1938.
Фишер (1975) — Fisher, D. “Reading and Visual Search”, Memory and Cognition, 3, 188-196, 1975.
Мейсон (1978) — Mason, M. “From Print to Sound in Mature Readers as a Function of Reader Ability and Two Forms of Orthographic Regularity”, Memory and Cognition, 6, 568-581, 1978.
Мейер и Гучера (1975) — Meyer, D. E., and K. D. Gutschera. “Orthographic versus Phonemic Processing of Printed Words”, Psychonomic Society Presentation, 1975.
Полацек, Велл и Шиндаер (1975) — Pollatsek, A, A D. Well, and R M. Schindler. “Effects of Segmentation and Expectancy on Matching Time for Words and Nonwords”, Journal of Experimental Psychology: Human Perception and Performance, 1, 328-338, 1975.
Сэнгер (1975) — Saenger, P. Space Between Words: The Origins of Silent Reading. Palo Alto, CA: Stanford University Press, 1975.
Кодд (1979) — Codd, E. F. “Extending the Database Relational Model to Capture More Meaning”, ACM Transactions on Database Systems, 44, 397-434, December 1979.
Вайнберг (1978) — Weinberg, G. The Psychology of Computer Programming: Silver Anniversary Edition. New York: Dorset House, 1998.
Миллер (1956) — Miller, G., A. “The Magical Number Seven Plus or Minus Two: Some Limits on Our Capacity for Processing Information”, The Psyco-logical Review, 1956.
Мак-Кабе (1976) — McCabe, Tom. “A Complexity Measure”, IEEE Transactions on Software, 1976.
Селко (1999) — Celko, J. Data & Databases. San Francisco: Morgan-Kaufmann, 1999.
Ледгард (1975) — Ledgard, H. Programming Proverbs. Rochelle Park, NJ, Hayden Books, 1975.
Селко (2004) — Celko, J. Trees & Hierarchies in SQL San Francisco: Morgan-Kaufmann, 2004.
Селко (2005) — Celko, J. SQLforSmarties (3rd ed.). San Francisco: Morgan-Kaufmann, 2005.
Об авторе
Джо Селко (Joe Celko)— известный преподаватель и консультант, один из самых читаемых в мире авторов книг по SQL. Большую известность принесли ему десятилетняя работа в комитете ANSI по стандартам SQL, колонка в журнале Intelligent Enterprise (получившая несколько премий Reader's Choice) и множество реальных историй, которыми он иллюстрирует свои взгляды на SQL-программирование. Он также является автором бестселлеров SQL for Smarties: Advanced SQL Programming (второе издание), SQL Puzzles and Answers и Trees and Hierarchies in SQL for Smarties.