Проектирование и разработка БД Oracle для информатизации объектов культуры
Разработка Базы Данных для информационной системы архива. Обоснование выбора Entity-Attribute-Value в качестве метода проектирования БД. Модификация ROT с учетом наследования, модели Тенцера. Процесс генерации таблиц. Тестовые примеры (test cases).
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 19.01.2014 |
Размер файла | 5,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
1230)A
1231 WHERE (A.r between ((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
1232 GROUP BY A.modified_time, A.MODIFIED_USER;
1233
1234 RETURN xDocument;
1235
1236 ELSIF vName = 'DICTIONARY' THEN
1237
1238 SELECT
1239 XMLElement("attribute_summary", XMLAttributes(nIDAttribute AS id),
1240 XMLAgg(XMLElement("transaction",
1241 XMLAttributes(to_char(A.modified_time, 'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
1242 XMLAgg(
1243 XMLConcat(
1244 XMLElement("attribute",
1245 XMLAttributes(
1246 nIDAttribute AS id_attribute,
1247 A.old_serialnumber AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
1248 A.type_of_operation AS type_of_operation, A.note AS attribute_note,
1249 'DICTIONARY' AS attribute_datatype
1250),
1251 XMLElement("old_value_attribute",A.old_value),
1252 XMLElement("new_value_attribute",A.new_value)
1253)
1254)--XMLConcat
1255)--XMLAgg
1256)--XMLAttributes
1257 order by A.modified_time desc
1258)
1259)
1260 INTO xDocument
1261 FROM (
1262 SELECT a.*, usl.*, s.*, rownum r
1263 FROM attributes a, userdictionaryvalueslog usl, systemdatavalues s
1264 WHERE a.id = nIDAttribute and usl.id_attribute = nIDAttribute AND usl.id_attribute = s.idparent AND s.idlanguage = 1
1265)A
1266 WHERE (A.r between ((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
1267 GROUP BY A.modified_time, A.MODIFIED_USER;
1268
1269 RETURN xDocument;
1270
1271 END IF;
1272 RETURN NULL;
1273 END pageAuditByAttribute;
1274
1275 FUNCTION pageAuditByObject(nIDObject objects.id%TYPE, nIdLanguage NUMBER, nPageNumber NUMBER, nAmountPerPage NUMBER) RETURN XMLTYPE AS
1276 xDocument XMLTYPE;
1277 BEGIN
1278
1279 SELECT
1280 XMLElement("object_summary", XMLAttributes(nIDObject AS id),
1281 XMLAgg(XMLElement("transaction",
1282 XMLAttributes(to_char(A.modified_time, 'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
1283 XMLAgg(
1284 XMLConcat(
1285 XMLElement("attribute",
1286 XMLAttributes(
1287 A.new_idattribute AS id_attribute,
1288 A.old_serialnumber AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
1289 A.type_of_operation AS type_of_operation, A.attribute_note AS attribute_note,
1290 A.attribute_datatype AS attribute_datatype, A.datatype_length AS datatype_length
1291),
1292 XMLElement("old_value_attribute",A.old_value),
1293 XMLElement("new_value_attribute",A.new_value)
1294),
1295 XMLElement("object",
1296 XMLAttributes(
1297 A.OLD_IDPARENTOBJECT AS OLD_IDPARENTOBJECT,
1298 A.NEW_IDPARENTOBJECT AS NEW_IDPARENTOBJECT,
1299 A.OBJECTTYPE NEW_OBJECTTYPE,
1300 A.OLD_OWNER OLD_OWNER,
1301 A.NEW_OWNER NEW_OWNER,
1302 A.OLD_ORIGHTS OLD_ORIGHTS,
1303 A.NEW_ORIGHTS NEW_ORIGHTS,
1304 A.OLD_ARIGHTS OLD_ARIGHTS,
1305 A.NEW_ARIGHTS NEW_ARIGHTS,
1306 A.OPERATION OPERATION,
1307 A.OBJECTNOTE OBJECTNOTE
1308)
1309)
1310)--XMLConcat
1311)--XMLAgg
1312)--XMLAttributes
1313 order by A.modified_time desc
1314)
1315)
1316 INTO xDocument
1317 FROM (
1318 SELECT B.*, rownum r
1319 FROM (
1320 --usermultilangvalueslog
1321 SELECT uml.id_attribute AS new_idattribute,
1322 to_clob(uml.old_value) AS old_value,
1323 to_clob(uml.new_value) AS new_value,
1324 uml.old_serialnumber AS old_serialnumber,
1325 uml.new_serialnumber AS new_serialnumber,
1326 uml.modified_user AS modified_user,
1327 uml.modified_time AS modified_time,
1328 uml.type_of_operation AS type_of_operation,
1329 s.value AS attribute_note,
1330 'MULTILANG' AS attribute_datatype,
1331 a.length AS datatype_length,
1332 null OLD_IDPARENTOBJECT,
1333 null NEW_IDPARENTOBJECT,
1334 null OBJECTTYPE,
1335 null OLD_OWNER,
1336 null NEW_OWNER,
1337 null OLD_ORIGHTS,
1338 null NEW_ORIGHTS,
1339 null OLD_ARIGHTS,
1340 null NEW_ARIGHTS,
1341 null OPERATION,
1342 null OBJECTNOTE
1343 FROM objects o, attributes a, objecttypes ot, usermultilangvalueslog uml, systemdatavalues s
1344 WHERE o.id = nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1345 AND
1346 (uml.id_object = o.id and uml.id_attribute = a.id)
1347
1348 UNION ALL
1349 --userstringvalueslog
1350 SELECT uml.id_attribute AS new_idattribute,
1351 to_clob(uml.old_value) AS old_value,
1352 to_clob(uml.new_value) AS new_value,
1353 uml.old_serialnumber AS old_serialnumber,
1354 uml.new_serialnumber AS new_serialnumber,
1355 uml.modified_user AS modified_user,
1356 uml.modified_time AS modified_time,
1357 uml.type_of_operation AS type_of_operation,
1358 s.value AS attribute_note,
1359 'STRING' AS attribute_datatype,
1360 a.length AS datatype_length,
1361 null OLD_IDPARENTOBJECT,
1362 null NEW_IDPARENTOBJECT,
1363 null OBJECTTYPE,
1364 null OLD_OWNER,
1365 null NEW_OWNER,
1366 null OLD_ORIGHTS,
1367 null NEW_ORIGHTS,
1368 null OLD_ARIGHTS,
1369 null NEW_ARIGHTS,
1370 null OPERATION,
1371 null OBJECTNOTE
1372 FROM objects o, attributes a, objecttypes ot, userstringvalueslog uml, systemdatavalues s
1373 WHERE o.id = nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1374 AND
1375 (uml.id_object = o.id and uml.id_attribute = a.id)
1376
1377 UNION ALL
1378 --userdatevalueslog
1379 SELECT uml.id_attribute AS new_idattribute,
1380 to_clob(uml.old_value) AS old_value,
1381 to_clob(uml.new_value) AS new_value,
1382 uml.old_serialnumber AS old_serialnumber,
1383 uml.new_serialnumber AS new_serialnumber,
1384 uml.modified_user AS modified_user,
1385 uml.modified_time AS modified_time,
1386 uml.type_of_operation AS type_of_operation,
1387 s.value AS attribute_note,
1388 'DATE' AS attribute_datatype,
1389 a.length AS datatype_length,
1390 null OLD_IDPARENTOBJECT,
1391 null NEW_IDPARENTOBJECT,
1392 null OBJECTTYPE,
1393 null OLD_OWNER,
1394 null NEW_OWNER,
1395 null OLD_ORIGHTS,
1396 null NEW_ORIGHTS,
1397 null OLD_ARIGHTS,
1398 null NEW_ARIGHTS,
1399 null OPERATION,
1400 null OBJECTNOTE
1401 FROM objects o, attributes a, objecttypes ot, userdatevalueslog uml, systemdatavalues s
1402 WHERE o.id = nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1403 AND
1404 (uml.id_object = o.id and uml.id_attribute = a.id)
1405
1406 UNION ALL
1407 --userclobvalueslog
1408 SELECT uml.id_attribute AS new_idattribute,
1409 to_clob(uml.old_value) AS old_value,
1410 to_clob(uml.new_value) AS new_value,
1411 uml.old_serialnumber AS old_serialnumber,
1412 uml.new_serialnumber AS new_serialnumber,
1413 uml.modified_user AS modified_user,
1414 uml.modified_time AS modified_time,
1415 uml.type_of_operation AS type_of_operation,
1416 s.value AS attribute_note,
1417 'CLOB' AS attribute_datatype,
1418 a.length AS datatype_length,
1419 null OLD_IDPARENTOBJECT,
1420 null NEW_IDPARENTOBJECT,
1421 null OBJECTTYPE,
1422 null OLD_OWNER,
1423 null NEW_OWNER,
1424 null OLD_ORIGHTS,
1425 null NEW_ORIGHTS,
1426 null OLD_ARIGHTS,
1427 null NEW_ARIGHTS,
1428 null OPERATION,
1429 null OBJECTNOTE
1430 FROM objects o, attributes a, objecttypes ot, userclobvalueslog uml, systemdatavalues s
1431 WHERE o.id = nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1432 AND
1433 (uml.id_object = o.id and uml.id_attribute = a.id)
1434
1435 UNION ALL
1436 --usernumbervalueslog
1437 SELECT uml.id_attribute AS new_idattribute,
1438 to_clob(uml.old_value) AS old_value,
1439 to_clob(uml.new_value) AS new_value,
1440 uml.old_serialnumber AS old_serialnumber,
1441 uml.new_serialnumber AS new_serialnumber,
1442 uml.modified_user AS modified_user,
1443 uml.modified_time AS modified_time,
1444 uml.type_of_operation AS type_of_operation,
1445 s.value AS attribute_note,
1446 'CLOB' AS attribute_datatype,
1447 a.length AS datatype_length,
1448 null OLD_IDPARENTOBJECT,
1449 null OBJECTTYPE,
1450 null NEW_OBJECTTYPE,
1451 null OLD_OWNER,
1452 null NEW_OWNER,
1453 null OLD_ORIGHTS,
1454 null NEW_ORIGHTS,
1455 null OLD_ARIGHTS,
1456 null NEW_ARIGHTS,
1457 null OPERATION,
1458 null OBJECTNOTE
1459 FROM objects o, attributes a, objecttypes ot, usernumbervalueslog uml, systemdatavalues s
1460 WHERE o.id = nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1461 AND
1462 (uml.id_object = o.id and uml.id_attribute = a.id)
1463
1464 UNION ALL
1465 --userdictionaryvalueslog
1466 SELECT uml.id_attribute AS new_idattribute,
1467 to_clob(uml.old_value) AS old_value,
1468 to_clob(uml.new_value) AS new_value,
1469 uml.old_serialnumber AS old_serialnumber,
1470 uml.new_serialnumber AS new_serialnumber,
1471 uml.modified_user AS modified_user,
1472 uml.modified_time AS modified_time,
1473 uml.type_of_operation AS type_of_operation,
1474 s.value AS attribute_note,
1475 'CLOB' AS attribute_datatype,
1476 a.length AS datatype_length,
1477 null OLD_IDPARENTOBJECT,
1478 null NEW_IDPARENTOBJECT,
1479 null OBJECTTYPE,
1480 null OLD_OWNER,
1481 null NEW_OWNER,
1482 null OLD_ORIGHTS,
1483 null NEW_ORIGHTS,
1484 null OLD_ARIGHTS,
1485 null NEW_ARIGHTS,
1486 null OPERATION,
1487 null OBJECTNOTE
1488 FROM objects o, attributes a, objecttypes ot, userdictionaryvalueslog uml, systemdatavalues s
1489 WHERE o.id = nIDObject and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1490 AND
1491 (uml.id_object = o.id and uml.id_attribute = a.id)
1492
1493 UNION ALL
1494
1495 SELECT null AS new_idattribute,
1496 null AS old_value,
1497 null AS new_value,
1498 null AS old_serialnumber,
1499 null AS new_serialnumber,
1500 OL.MODIFIED_USER AS modified_user,
1501 OL.MODIFIED_TIME AS modified_time,
1502 null AS type_of_operation,
1503 null AS attribute_note,
1504 null AS attribute_datatype,
1505 null AS datatype_length,
1506 OL.OLD_IDPARENTOBJECT OLD_IDPARENTOBJECT,
1507 OL.NEW_IDPARENTOBJECT NEW_IDPARENTOBJECT,
1508 OL.NEW_OBJECTTYPE NEW_OBJECTTYPE,
1509 OL.OLD_OWNER OLD_OWNER,
1510 OL.NEW_OWNER NEW_OWNER,
1511 OL.OLD_ORIGHTS OLD_ORIGHTS,
1512 OL.NEW_ORIGHTS NEW_ORIGHTS,
1513 OL.OLD_ARIGHTS OLD_ARIGHTS,
1514 OL.NEW_ARIGHTS NEW_ARIGHTS,
1515 OL.TYPE_OF_OPERATION OPERATION,
1516 s.value OBJECTNOTE
1517 FROM objectslog OL, systemdatavalues s
1518 WHERE OL.ID_OBJECT = nIDObject and s.idparent = OL.ID_OBJECT AND S.IDLANGUAGE = nIdLanguage
1519 -- ORDER BY modified_time
1520
1521) B)A
1522 WHERE (A.r between ((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
1523 GROUP BY A.modified_time, A.MODIFIED_USER
1524 -- HAVING count(A.MODIFIED_TIME) between ((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage)--;
1525 ORDER BY A.modified_time;
1526
1527 RETURN xDocument;
1528
1529 END pageAuditByObject;
1530
1531 FUNCTION pageAuditByObjectType(nIDObjectType objecttypes.id%TYPE, nIdLanguage NUMBER, nPageNumber NUMBER, nAmountPerPage NUMBER) RETURN XMLTYPE IS
1532 xDocument XMLTYPE;
1533 BEGIN
1534
1535 --SELECT --XMLElement("object_type",
1536 -- XMLAttributes(nIDObjectType AS idObjectType),
1537 -- XMLElement("a",
1538
1539 SELECT XMLElement("object_type",
1540 XMLAttributes(1 AS idObjectType),
1541 XMLElement("objects_summary",
1542 XMLAgg(XMLElement("transaction",
1543 XMLAttributes(to_char(A.modified_time, 'dd-mm-yyyy hh24:mi:ss') AS modified_time, A.MODIFIED_USER AS MODIFIED_USER),
1544 XMLAgg(
1545 XMLElement("object_info",
1546 XMLAttributes(A.id AS "object_id"),
1547 XMLElement("attribute",
1548 XMLAttributes(
1549 A.new_idattribute AS id_attribute,
1550 A.old_serialnumber AS old_serialnumber, A.new_serialnumber AS new_serialnumber,
1551 A.type_of_operation AS type_of_operation, A.attribute_note AS attribute_note,
1552 A.attribute_datatype AS attribute_datatype, A.datatype_length AS datatype_length
1553),
1554 XMLElement("old_value_attribute",A.old_value),
1555 XMLElement("new_value_attribute",A.new_value)
1556),
1557 XMLElement("object_change",
1558 XMLAttributes(
1559 A.OLD_IDPARENTOBJECT AS OLD_IDPARENTOBJECT,
1560 A.NEW_IDPARENTOBJECT AS NEW_IDPARENTOBJECT,
1561 A.OBJECTTYPE NEW_OBJECTTYPE,
1562 A.OLD_OWNER OLD_OWNER,
1563 A.NEW_OWNER NEW_OWNER,
1564 A.OLD_ORIGHTS OLD_ORIGHTS,
1565 A.NEW_ORIGHTS NEW_ORIGHTS,
1566 A.OLD_ARIGHTS OLD_ARIGHTS,
1567 A.NEW_ARIGHTS NEW_ARIGHTS,
1568 A.OPERATION OPERATION,
1569 A.OBJECTNOTE OBJECTNOTE
1570)
1571)
1572)--XMLConcat
1573)--XMLAgg
1574)--XMLAttributes
1575 order by A.modified_time desc
1576)
1577)
1578)
1579 INTO xDocument
1580 --showAuditByObject(id, nIdLanguage)
1581 --) AS objects)
1582 FROM (
1583 SELECT B.*, rownum r
1584 FROM (
1585 --usermultilangvalueslog
1586 SELECT
1587 o.id AS id,
1588 uml.id_attribute AS new_idattribute,
1589 to_clob(uml.old_value) AS old_value,
1590 to_clob(uml.new_value) AS new_value,
1591 uml.old_serialnumber AS old_serialnumber,
1592 uml.new_serialnumber AS new_serialnumber,
1593 uml.modified_user AS modified_user,
1594 uml.modified_time AS modified_time,
1595 uml.type_of_operation AS type_of_operation,
1596 s.value AS attribute_note,
1597 'MULTILANG' AS attribute_datatype,
1598 a.length AS datatype_length,
1599 null OLD_IDPARENTOBJECT,
1600 null NEW_IDPARENTOBJECT,
1601 null OBJECTTYPE,
1602 null OLD_OWNER,
1603 null NEW_OWNER,
1604 null OLD_ORIGHTS,
1605 null NEW_ORIGHTS,
1606 null OLD_ARIGHTS,
1607 null NEW_ARIGHTS,
1608 null OPERATION,
1609 null OBJECTNOTE
1610 FROM objects o, attributes a, objecttypes ot, usermultilangvalueslog uml, systemdatavalues s
1611 WHERE o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1612 AND
1613 (uml.id_object = o.id and uml.id_attribute = a.id)
1614
1615 UNION ALL
1616 --userstringvalueslog
1617 SELECT
1618 o.id AS id,
1619 uml.id_attribute AS new_idattribute,
1620 to_clob(uml.old_value) AS old_value,
1621 to_clob(uml.new_value) AS new_value,
1622 uml.old_serialnumber AS old_serialnumber,
1623 uml.new_serialnumber AS new_serialnumber,
1624 uml.modified_user AS modified_user,
1625 uml.modified_time AS modified_time,
1626 uml.type_of_operation AS type_of_operation,
1627 s.value AS attribute_note,
1628 'STRING' AS attribute_datatype,
1629 a.length AS datatype_length,
1630 null OLD_IDPARENTOBJECT,
1631 null NEW_IDPARENTOBJECT,
1632 null OBJECTTYPE,
1633 null OLD_OWNER,
1634 null NEW_OWNER,
1635 null OLD_ORIGHTS,
1636 null NEW_ORIGHTS,
1637 null OLD_ARIGHTS,
1638 null NEW_ARIGHTS,
1639 null OPERATION,
1640 null OBJECTNOTE
1641 FROM objects o, attributes a, objecttypes ot, userstringvalueslog uml, systemdatavalues s
1642 WHERE o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1643 AND
1644 (uml.id_object = o.id and uml.id_attribute = a.id)
1645
1646 UNION ALL
1647 --userdatevalueslog
1648 SELECT
1649 o.id AS id,
1650 uml.id_attribute AS new_idattribute,
1651 to_clob(uml.old_value) AS old_value,
1652 to_clob(uml.new_value) AS new_value,
1653 uml.old_serialnumber AS old_serialnumber,
1654 uml.new_serialnumber AS new_serialnumber,
1655 uml.modified_user AS modified_user,
1656 uml.modified_time AS modified_time,
1657 uml.type_of_operation AS type_of_operation,
1658 s.value AS attribute_note,
1659 'DATE' AS attribute_datatype,
1660 a.length AS datatype_length,
1661 null OLD_IDPARENTOBJECT,
1662 null NEW_IDPARENTOBJECT,
1663 null OBJECTTYPE,
1664 null OLD_OWNER,
1665 null NEW_OWNER,
1666 null OLD_ORIGHTS,
1667 null NEW_ORIGHTS,
1668 null OLD_ARIGHTS,
1669 null NEW_ARIGHTS,
1670 null OPERATION,
1671 null OBJECTNOTE
1672 FROM objects o, attributes a, objecttypes ot, userdatevalueslog uml, systemdatavalues s
1673 WHERE o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1674 AND
1675 (uml.id_object = o.id and uml.id_attribute = a.id)
1676
1677 UNION ALL
1678 --userclobvalueslog
1679 SELECT
1680 o.id AS id,
1681 uml.id_attribute AS new_idattribute,
1682 to_clob(uml.old_value) AS old_value,
1683 to_clob(uml.new_value) AS new_value,
1684 uml.old_serialnumber AS old_serialnumber,
1685 uml.new_serialnumber AS new_serialnumber,
1686 uml.modified_user AS modified_user,
1687 uml.modified_time AS modified_time,
1688 uml.type_of_operation AS type_of_operation,
1689 s.value AS attribute_note,
1690 'CLOB' AS attribute_datatype,
1691 a.length AS datatype_length,
1692 null OLD_IDPARENTOBJECT,
1693 null NEW_IDPARENTOBJECT,
1694 null OBJECTTYPE,
1695 null OLD_OWNER,
1696 null NEW_OWNER,
1697 null OLD_ORIGHTS,
1698 null NEW_ORIGHTS,
1699 null OLD_ARIGHTS,
1700 null NEW_ARIGHTS,
1701 null OPERATION,
1702 null OBJECTNOTE
1703 FROM objects o, attributes a, objecttypes ot, userclobvalueslog uml, systemdatavalues s
1704 WHERE o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1705 AND
1706 (uml.id_object = o.id and uml.id_attribute = a.id)
1707
1708 UNION ALL
1709 --usernumbervalueslog
1710 SELECT
1711 o.id AS id,
1712 uml.id_attribute AS new_idattribute,
1713 to_clob(uml.old_value) AS old_value,
1714 to_clob(uml.new_value) AS new_value,
1715 uml.old_serialnumber AS old_serialnumber,
1716 uml.new_serialnumber AS new_serialnumber,
1717 uml.modified_user AS modified_user,
1718 uml.modified_time AS modified_time,
1719 uml.type_of_operation AS type_of_operation,
1720 s.value AS attribute_note,
1721 'CLOB' AS attribute_datatype,
1722 a.length AS datatype_length,
1723 null OLD_IDPARENTOBJECT,
1724 null OBJECTTYPE,
1725 null NEW_OBJECTTYPE,
1726 null OLD_OWNER,
1727 null NEW_OWNER,
1728 null OLD_ORIGHTS,
1729 null NEW_ORIGHTS,
1730 null OLD_ARIGHTS,
1731 null NEW_ARIGHTS,
1732 null OPERATION,
1733 null OBJECTNOTE
1734 FROM objects o, attributes a, objecttypes ot, usernumbervalueslog uml, systemdatavalues s
1735 WHERE o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1736 AND
1737 (uml.id_object = o.id and uml.id_attribute = a.id)
1738
1739 UNION ALL
1740 --userdictionaryvalueslog
1741 SELECT
1742 o.id AS id,
1743 uml.id_attribute AS new_idattribute,
1744 to_clob(uml.old_value) AS old_value,
1745 to_clob(uml.new_value) AS new_value,
1746 uml.old_serialnumber AS old_serialnumber,
1747 uml.new_serialnumber AS new_serialnumber,
1748 uml.modified_user AS modified_user,
1749 uml.modified_time AS modified_time,
1750 uml.type_of_operation AS type_of_operation,
1751 s.value AS attribute_note,
1752 'CLOB' AS attribute_datatype,
1753 a.length AS datatype_length,
1754 null OLD_IDPARENTOBJECT,
1755 null NEW_IDPARENTOBJECT,
1756 null OBJECTTYPE,
1757 null OLD_OWNER,
1758 null NEW_OWNER,
1759 null OLD_ORIGHTS,
1760 null NEW_ORIGHTS,
1761 null OLD_ARIGHTS,
1762 null NEW_ARIGHTS,
1763 null OPERATION,
1764 null OBJECTNOTE
1765 FROM objects o, attributes a, objecttypes ot, userdictionaryvalueslog uml, systemdatavalues s
1766 WHERE o.idobjecttype = nIDObjectType and o.idobjecttype = ot.id and a.idobjecttype = ot.id and s.idparent = a.id AND S.IDLANGUAGE = nIdLanguage
1767 AND
1768 (uml.id_object = o.id and uml.id_attribute = a.id)
1769
1770 UNION ALL
1771
1772 SELECT
1773 o.id AS id,
1774 null AS new_idattribute,
1775 null AS old_value,
1776 null AS new_value,
1777 null AS old_serialnumber,
1778 null AS new_serialnumber,
1779 OL.MODIFIED_USER AS modified_user,
1780 OL.MODIFIED_TIME AS modified_time,
1781 null AS type_of_operation,
1782 null AS attribute_note,
1783 null AS attribute_datatype,
1784 null AS datatype_length,
1785 OL.OLD_IDPARENTOBJECT OLD_IDPARENTOBJECT,
1786 OL.NEW_IDPARENTOBJECT NEW_IDPARENTOBJECT,
1787 OL.NEW_OBJECTTYPE NEW_OBJECTTYPE,
1788 OL.OLD_OWNER OLD_OWNER,
1789 OL.NEW_OWNER NEW_OWNER,
1790 OL.OLD_ORIGHTS OLD_ORIGHTS,
1791 OL.NEW_ORIGHTS NEW_ORIGHTS,
1792 OL.OLD_ARIGHTS OLD_ARIGHTS,
1793 OL.NEW_ARIGHTS NEW_ARIGHTS,
1794 OL.TYPE_OF_OPERATION OPERATION,
1795 s.value OBJECTNOTE
1796 FROM objectslog OL, systemdatavalues s, objects o
1797 WHERE o.idobjecttype = nIDObjectType AND OL.ID_OBJECT = o.id and s.idparent = OL.ID_OBJECT AND S.IDLANGUAGE = nIdLanguage
1798 -- ORDER BY modified_time
1799
1800) B)A
1801 WHERE
1802 (A.r between ((nPageNumber-1)*nAmountPerPage+1) and (nPageNumber*nAmountPerPage))
1803 GROUP BY A.modified_time, A.MODIFIED_USER--, A.ID
1804 ORDER BY A.modified_time;
1805
1806 RETURN xDocument;
1807
1808 END pageAuditByObjectType;
1809
1810 FUNCTION addGroupRights(nIDObject objects.id%TYPE) RETURN XMLTYPE IS
1811 xDocument XMLTYPE;
1812 BEGIN
1813 SELECT
1814 XMLAgg(
1815 XMLElement("usergroup",
1816 XMLAttributes(ug.name AS group_name
1817,uug.grights AS "group_default_right"
1818,oug.grights AS "group_object_right")
1819)
1820)
1821 INTO xDocument
1822 FROM users u, usergroups ug, users_usergroups uug, objects_usergroups oug
1823 WHERE u.id = uug.id_user and uug.id_usergroup = oug.id_usergroup(+) and u.name = user
1824 and (oug.id_object = nIDObject or oug.id_object is null)
1825 and ug.id = uug.id_usergroup;
1826 RETURN xDocument;
1827 END addGroupRights;
1828
1829 FUNCTION showObjectRights(nIDObject objects.id%TYPE) RETURN XMLTYPE IS
1830 xDocument XMLTYPE;
1831 BEGIN
1832 SELECT
1833 XMLElement("object_rights",
1834 XMLAttributes(nIDObject AS id_object),
1835 XMLElement("owner", o.owner),
1836 XMLElement("owner_right", o.orights),
1837 XMLElement("usergroups",addGroupRights(nIDObject)),
1838 XMLElement("others_right", o.arights)
1839)
1840 INTO xDocument
1841 FROM objects o
1842 WHERE o.id = nIDObject;
1843
1844 RETURN xDocument;
1845 END showObjectRights;
1846
1847
1848 FUNCTION showFoundObjectRights RETURN XMLTYPE IS
1849 xDocument XMLTYPE;
1850 BEGIN
1851 SELECT
1852 XMLElement("Found_object_rights",
1853 XMLAgg(
1854 XMLElement("object",
1855 XMLAttributes(o.id AS id_object),
1856 XMLElement("owner", o.owner),
1857 XMLElement("owner_right", o.orights),
1858 XMLElement("usergroups",datamodification.addGroupRights(o.id)),
1859 XMLElement("others_right", o.arights)
1860)
1861)
1862)
1863 INTO xDocument
1864 FROM objects o, tempfoundobjects t
1865 WHERE o.id = t.id;
1866
1867 RETURN xDocument;
1868 END showFoundObjectRights;
1869
1870 end DATAMODIFICATION;
1871 /
Листинг пакета GENERATETABLES
Пакет GENERATETABLES предназначен для генерации пользовательских таблиц. Таким образом, будут пересозданы все объекты пользовательских схем: вначале будут созданы пользовательские таблицы, затем на них пользовательские представления. Код заголовка пакета и комментарии к заголовку пакета (см. таб.Пр.1.2.) ниже:
Таблица Пр1.2. Комментарии к заголовку пакета generateTables.
Номер строчки кода |
Комментарии |
|
3 |
Процедура doGenerate предназначена для генерации, состоящей из удаления таблиц (если они существуют), создания и вставки значений данных в генерируемые таблицы. |
|
4 |
Процедура createParentTables предназначена для создания генерируемых таблиц с атрибутами соответвующими объектному типу, для которого создается плоская таблица. |
|
5 |
Процедура insertDataParentTables предназначена для вставки значений для сгенерированных таблиц. |
SQL> CREATE OR REPLACE PACKAGE generateTables IS
2
3 procedure doGenerate;
4 procedure createParentTables;
5 procedure insertDataParentTables;
6
7 END generateTables;
8 /
Package created
Небольшие комментарии по реализации тела пакета generateTables:
Таблица Пр1.3. Комментарии к телу пакета generateTables.
Номера строчек кода |
Комментарии |
|
3-19 |
Процедура dropParentTables предназначена для удаления таблиц (если они существуют) схемы. Обратите внимание, что ее спецификации нету в заголовке пакета generateTables, поэтому она доступна только внутри пакета другим процедурам этого пакета. Создается курсор for curTables IN (select name from objecttypes) LOOP - 7 строка, по которым удаляются таблицы соответствующих объектных типов. Если такой таблицы по какой-либо причине нету, то срабатывает исключение, выводится сообщение о том, что такой таблицы нету, и цикл 7 строки продолжается. |
|
21-38 |
Процедура createParentTables предназначена для создания генерируемых таблиц с атрибутами соответвующие объектному типу, для которого создается плоская таблица. Для этого создается курсор по всем объектным типам. В переменную сSQLCode, предназначенную для хранения динамического SQL кода, записывается код, который собирается, как совокупность объектного типа (значение внешнего курсора for curTables IN (select name, id from objecttypes) LOOP - 25 строка кода) и атрибутов ему соответствующих (значения параметризированного внутреннего курсора for curAttributes IN (select name, iddatatype, length from attributes where idobjecttype = curTables.id) LOOP - 27 строка кода). |
|
40-61 |
Процедура insertDataParentTables предназначена для вставки значений для сгенерированных таблиц. Для этого создается курсор по всем объектным типам. В переменную сSQLCode, предназначенную для хранения динамического SQL кода, записывается код, который собирается, как совокупность объектного типа (значение внешнего курсора for curTables IN (select name, id from objecttypes) LOOP - 45 строка кода) и атрибутов ему соответствующих (значения параметризированного курсора for curAttributes IN (select name, iddatatype, length from attributes where idobjecttype = curTables.id) LOOP - 47 строка кода). Значения в генерируемую таблицу выбираются из системной таблицы userStringValues, которая хранит в поле Value значения для соответветствующего атрибута и объекта (его id задается из внутреннего курсора for curObjects IN (SELECT id from objects where idobjecttype = curTables.id) LOOP - 50 строка кода). |
|
63-68 |
Процедура doGenerate предназначена для генерации, состоящей из удаления таблиц (если они существуют), создания и вставки значений данных в генерируемые таблицы и состоит из последовательного вызова процедур dropParentTables, createParentTables и insertDataParentTables. |
SQL> CREATE OR REPLACE PACKAGE BODY generateTables IS
2
3 procedure dropParentTables is
4 vSQLCode VARCHAR2(4000);
5 eTableNotExists EXCEPTION;
6 PRAGMA EXCEPTION_INIT(eTableNotExists, -00942);
7 begin
8 for curTables IN (select name from objecttypes) LOOP
9 BEGIN
10 vSQLCode := 'DROP TABLE '||curTables.Name;
11 EXECUTE IMMEDIATE vSQLCode;
12 DBMS_OUTPUT.put_line(vSQLCode);
13 EXCEPTION
14 WHEN eTableNotExists THEN
15 --catch the exception that the table doesn't exist and continue dropping the schema tables
16 DBMS_OUTPUT.put_line('TABLE '||curTables.Name||' doesn''t exist and therefore can''t be dropped');
17 END;
18 END LOOP;
19 end dropParentTables;
20
21 procedure createParentTables is
22 cSQLCode VARCHAR2(4000);
23 vName VARCHAR2(4000);
24 begin
25 for curTables IN (select name, id from objecttypes) LOOP
26 cSQLCode := 'CREATE TABLE '||curTables.Name||'(ID NUMBER PRIMARY KEY';
27 for curAttributes IN (select name, iddatatype, length from attributes where idobjecttype = curTables.id) LOOP
28 select name into vName from datatypes where id = curAttributes.Iddatatype;
29 cSQLCode := cSQLCode || ',' || curAttributes.Name || ' ' || vName;
30 if vName = 'VARCHAR2' THEN
31 cSQLCode := cSQLCode ||'(' || curAttributes.Length ||')';
32 END IF;
33 end loop;
34 cSQLCode := cSQLCode ||')';
35 --DBMS_OUTPUT.put_line(cSQLCode);
36 EXECUTE IMMEDIATE cSQLCode;
37 END LOOP;
38 end createParentTables;
39
40 procedure insertDataParentTables is
41 cSQLCode VARCHAR2(4000);
42 cTableCode VARCHAR2(2000);
43 vValue VARCHAR2(200);
44 begin
45 for curTables IN (select name, id from objecttypes) LOOP
46 cTableCode := 'INSERT INTO '||curTables.Name||'(ID';
47 for curAttributes IN (select name, iddatatype, length from attributes where idobjecttype = curTables.id) LOOP
48 cTableCode := cTableCode ||',' || curAttributes.Name;
49 end loop;
50 for curObjects IN (SELECT id from objects where idobjecttype = curTables.id) LOOP
51 cSQLCode := cTableCode || ') VALUES (' || curObjects.id;
52 for curAttributes IN (select name, iddatatype, length, id from attributes where idobjecttype = curTables.id) LOOP
53 select value into vvalue from userstringvalues where idobject = curObjects.id and idattribute = curAttributes.id;
54 cSQLCode := cSQLCode || ', ''' || vvalue || '''';
55 end loop;
56 cSQLCode := cSQLCode || ')';
57 EXECUTE IMMEDIATE cSQLCode;
58 END LOOP;
59 END LOOP;
60 COMMIT;
61 end insertDataParentTables;
62
63 procedure doGenerate IS
64 BEGIN
65 dropParentTables;
66 createParentTables;
67 insertDataParentTables;
68 END doGenerate;
69
70 END generateTables;
71 /
Package body created
Листинг пакета SEARCHDATA
Пакет SEARCHDATA предназначен для поиска объектов по набору атрибутов и заданным поисковых параметрам по этим атрибутам. Код заголовка пакета и комментарии к заголовку пакета (см. таб.Пр.1.4.) ниже:
Таблица Пр.1.4. Комментарии к заголовку пакета SEARCHDATA.
номер строчки кода |
Комментарии |
|
2 |
Функция insertSearchParameters предназначена для вставки задаваемых в приложении поисковых параметров в таблицу SEARCHPARAMETERS. |
|
3 |
Процедура clearSearchParameters предназначена для удаления записей поисковых параметров в таблице SEARCHPARAMETERS. |
|
4 |
Функция getObjectPageIndex предназначена для вывода номера страницы на найденный объект. |
|
5 |
Функция doSearch предназначена для поиска. |
|
6 |
Функция getSearchParamNum предназначена для вывода количества заданных поисковых параметров в таблице SEARCHPARAMETERS. |
|
7 |
Функция getFoundObjectNum предназначена для вывода общего количества найденных объектов. |
|
8 |
Перегруженная функция getFoundObjectNum предназначена для вывода общего количества найденных объектов по заданному объектному типу. |
|
9 |
Функция getConditionType предназначена для вывода наименования поискового атрибута по его id. |
SQL> create or replace package SEARCHDATA as
2 function insertSearchParameters (nIDAttribute NUMBER,nIDCondition NUMBER,vValue VARCHAR2,nIDLanguage NUMBER) return NUMBER;
3 procedure clearSearchParameters;
4 function getObjectPageIndex (nIDObject NUMBER,nPageSize NUMBER) return NUMBER;
5 function doSearch (nIDObjectType NUMBER) return NUMBER;
6 function getSearchParamNum return NUMBER;
7 function getFoundObjectNum return NUMBER;
8 function getFoundObjectNum (nIDObjectType NUMBER) return NUMBER;
9 function getConditionType (nIdCondition NUMBER) return VARCHAR2;
10 end SEARCHDATA;
11 /
Листинг пакета SEARCHDATA приведен ниже. Отмечу, что в теле пакета есть private-функция getQueryText(31-57 строки). Эта функция предназначена для формирования кода запроса для поиска по объектам.
SQL> create or replace package body SEARCHDATA as
2
3 function insertSearchParameters (nIDAttribute NUMBER,nIDCondition NUMBER,vValue VARCHAR2,nIDLanguage NUMBER) return NUMBER as
4 BEGIN
5
6 INSERT INTO SEARCHPARAMETERS (IDATTRIBUTE,IDCONDITION,IDLANGUAGE,VALUE,IDSEARCHOBJECTTYPE)
7 SELECT nIDAttribute,nIDCondition,nIDLanguage, NVL(vValue, 0), ID
8 FROM attributes WHERE idobjecttype = nIDAttribute;
9 RETURN SQL%ROWCOUNT;
10
11 END;
12
13 procedure clearSearchParameters as
14 begin
15 DELETE FROM SEARCHPARAMETERS;
16 end;
17
18 function getObjectPageIndex (nIDObject NUMBER,nPageSize NUMBER) return NUMBER as
19 nPageNumber NUMBER;
20 nSerial NUMBER;
21 BEGIN
22 -- get object serial number
23 SELECT A.OBJECTSERIAL INTO nSerial FROM TEMPFOUNDOBJECTS A WHERE A.ID = nIDObject;
24 -- get page number
25 SELECT CEIL(COUNT(*)/nPageSize) INTO nPageNumber FROM TEMPFOUNDOBJECTS A
26 WHERE A.OBJECTSERIAL <= nSerial;
27 RETURN nPageNumber;
28 EXCEPTION WHEN NO_DATA_FOUND THEN RETURN -1;
29 END;
30
31 function getQueryText (nIDObjectType NUMBER) return CLOB as
32 vBaseTableName VARCHAR2(50) := ObjectsData.getObjectTypeSystemName(nIDObjectType);
33 cSQLText CLOB;
34 BEGIN
35
36 SELECT A.NAME
37 INTO vBaseTableName
38 FROM OBJECTTYPES A
39 WHERE A.ID = nIDOBjectType;
40
41 cSQLText := 'INSERT INTO TEMPFOUNDOBJECTS (ID,OBJECTSERIAL,HIERARCHICALSERIAL,FUSEOBJECT) ' ||
42 'SELECT ID,row_number() over (order by rnum) OBJECTSERIAL,row_number() over (order by rnum) HIERARCHICALSERIAL,1 FROM (SELECT ';
43 IF cSQLText IS NOT NULL THEN
44 -- hint for connect sort and search tables
45 cSQLText := cSQLText || '/*+ USE_NL(M) */ '
46 || vBaseTableName || '.ID, ROWNUM RNUM FROM ' || vBaseTableName || ',(' || cSQLText || ') M';
47 ELSE
48 cSQLText := cSQLText || vBaseTableName || '.ID, ROWNUM RNUM FROM ' || vBaseTableName;
49 END IF;
50
51
52 -- sorting
53 cSQLText := cSQLText || ' ORDER BY 1';
54 -- close query
55 cSQLText := cSQLText || ')';
56 RETURN cSQLText;
57 END;
58
59 function doSearch (nIDObjectType NUMBER) return NUMBER as
60 cSQLCode CLOB;
61 BEGIN
62
63 cSQLCode := getQueryText(nIDObjectType);
64
65 -- execute search query
66 EXECUTE IMMEDIATE cSQLCode;
67
68 RETURN SQL%ROWCOUNT;
69
70 END;
71
72 function getSearchParamNum return NUMBER as
73 nSearchParamNum NUMBER;
74 BEGIN
75 SELECT COUNT(*) INTO nSearchParamNum FROM SEARCHPARAMETERS A;
76 RETURN nSearchParamNum;
77 END;
78
79 function getConditionType (nIdCondition NUMBER) return VARCHAR2 as
80 cValue CONDITIONS.VALUE%TYPE;
81 BEGIN
82 SELECT C.VALUE INTO cValue FROM CONDITIONS C WHERE C.ID = nIDCondition;
83 RETURN cValue;
84 EXCEPTION WHEN NO_DATA_FOUND THEN
85 RETURN NULL;
86 END;
87
88 function getFoundObjectNum return NUMBER as
89 nObjectsNum NUMBER;
90 BEGIN
91 SELECT COUNT(*) INTO nObjectsNum
92 FROM TEMPFOUNDOBJECTS A WHERE A.FUSEOBJECT = 1;
93 RETURN nObjectsNum;
94 END;
95
96 function getFoundObjectNum (nIDObjectType NUMBER) return NUMBER as
97 nObjectsNum NUMBER;
98 BEGIN
99 SELECT
100 COUNT(*) INTO nObjectsNum
101 FROM
102 tempfoundobjects tf,
103 objects obj
104 WHERE
105 tf.id = obj.id
106 AND obj.idobjecttype = nIDObjectType
107 AND tf.fuseobject = 1;
108 RETURN nObjectsNum;
109 END;
110
111 end SEARCHDATA;
112 /
Листинг пакета SECURITYDATA
Пакет SECURITYDATA реализует политику тщательного контроля доступа, т.е. в зависимости от контекста подключения, предоставляет пользователю на объект права владельца или по умолчанию. Код заголовка пакета и комментарии к заголовку пакета (см. таб.Пр.1.5.) ниже:
Таблица Пр.1.5. Комментарии к заголовку пакета SECURITYDATA.
номер строчки кода |
Комментарии |
|
3 |
Функция checkRights предназначена для динамического определения прав вызывающего пользователя на объекты idObject. |
|
4 |
Это перегруженная версия функции checkRights 3 строчки кода. Необходима для ускоренного динамического определения прав вызывающего пользователя на объекты idObject, для этого все параметры объекта должны быть определены заранее. |
SQL> CREATE OR REPLACE PACKAGE SECURITYDATA
2 AS
3 FUNCTION checkRights(idObject NUMBER) RETURN NUMBER;
4 FUNCTION checkRights(idObject NUMBER, oright NUMBER, owner VARCHAR2, aright NUMBER) RETURN NUMBER;
5 END SECURITYDATA;
6 /
Package created
Код тела пакета SECURITYDATA:
Таблица Пр.1.6. Комментарии к телу пакета SECURITYDATA.
номера строчки кода |
Комментарии |
|
5-21 |
Функция checkRights предназначена для динамического определения прав вызывающего пользователя на объекты idObject. Строки 13-16: если пользователь является владельцем объекта то функция возвращает права владельца на объект. Строки 18-19: Иначе возвращаются права по умолчанию. |
|
23-33 |
Это перегруженная версия функции checkRights 3 строчки кода. Необходима для ускоренного динамического определения прав вызывающего пользователя на объекты idObject, для этого все параметры объекта должны быть определены заранее. Строки 27-29: если пользователь является владельцем объекта то функция возвращает права владельца на объект. Строка 31: Иначе возвращаются права по умолчанию. |
SQL> CREATE OR REPLACE PACKAGE BODY SECURITYDATA
2 AS
3
4
5 FUNCTION checkRights(idObject NUMBER) RETURN NUMBER
6 AS
7 nRight objectprivileges.id%TYPE;
8 vOwner objects.owner%TYPE;
9 BEGIN
10
11 SELECT owner INTO vOwner FROM objects WHERE id = idObject;
12
13 IF SYS_CONTEXT ('USERENV', 'SESSION_USER') = vOwner THEN
14 SELECT orights INTO nRight FROM objects WHERE id = idObject;
15 RETURN nRight;
16 END IF;
17
18 SELECT arights INTO nRight FROM objects WHERE id = idObject;
19 RETURN nRight;
20
21 END checkRights;
22
23 FUNCTION checkRights(idObject NUMBER, oright NUMBER, owner VARCHAR2, aright NUMBER) RETURN NUMBER
24 AS
25 BEGIN
26
27 IF SYS_CONTEXT ('USERENV', 'SESSION_USER')= owner THEN
28 RETURN oright;
29 END IF;
30
31 RETURN aright;
32
33 END checkRights;
34
35 END SECURITYDATA;
36 /
Приложение 2. Расширенный список тестовых примеров
В таблице Пр2.1. приведены тест-кейсы, которые проводились при разработке и тестировании базы данных. Возможные приоритеты тест-кейсов в порядке убывания их статуса: Blocker, Critical, Major, Minor, Trivial. К сожалению, ввиду относительно большого, проведенных тест-кейсов, здесь я размещаю только тест-кейсы у которых относительный приоритет Major и выше.
Таблица Пр2.1. Test cases.
ID |
Название |
Цель |
Среда выполнения |
Пошаговое выполнение |
Критерий выполнения |
Приоритет |
|
DB1 |
Поддержка объектов на русском языке |
Проверка создания, редактирования и удаления объектов на русском языке. |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, в котором есть атрибуты на русском языке. 2.Создать объект та-кого объектного типа. 3.Заполнить значения атрибутов объектного типа литералами на русском языке. 4.Сохранить в БД. 5. Выбрать этот объект из БД. |
Наличие объектов и корректный вывод значений атрибутов объекта на русском языке. |
Blocker |
|
DB2 |
Поддержка объектов на английском языке |
Проверка создания, редактирования и удаления объектов на английском языке. |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, в котором есть атрибуты на английском языке. 2.Создать объект такого объектного типа. 3.Заполнить значения атрибутов объектного типа литералами на английском языке. 4.Сохранить в БД. 5. Выбрать этот объект из БД. |
Наличие объектов и корректный вывод значений атрибутов объекта на английском языке. |
Blocker |
|
DB3 |
Поддержка объектов на немецком языке |
Проверка создания, редактирования и удаления объектов на немецком язы-ках. |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, в котором есть атрибуты на немецком языке. 2.Создать объект такого объектного типа. 3.Заполнить значения атрибутов объектного типа литералами на немецком языке. 4.Сохранить в БД. 5. Выбрать этот объект из БД. |
Наличие объектов и корректный вывод значений атрибутов объекта на немецком языке. |
Blocker |
|
DB4 |
Поддержка переключения работы информационной системы с русского на английский язык |
Проверка функционирования переключения работы информационной системы с русского на английский язык |
Internet Explorer 6.0. |
1. Установить в приложении русский язык. 2. Выбрать объект. 3.Переключиться на английский язык. 4. Выбрать объект. |
Корректное отображение значений атрибутов объекта как русском так и на английских языках |
Critical |
|
DB5 |
Поддержка переключения работы информационной системы с английского на русский язык |
Проверка функционирования переключения ра-боты информа-ционной системы с русского на ан-глийский язык |
PL\SQL Developer 7.1.5.1398 |
1. Установить в приложении английский язык. 2. Выбрать объект. 3.Переключиться на русский язык. 4. Выбрать объект |
Корректное отображение значений атрибутов объекта как русском так и на английских языках |
Critical |
|
DB6 |
Поддержка безязыково-го типа MULTILANG |
Проверка функционирования безязыкового типа MULTILANG |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, в котором есть атрибуты типа данных MULTI-LANG. 2.Создать объект та-кого объектного типа. 3.Заполнить значения атрибутов объектного типа. 4.Сохранить в БД. 5. Выбрать этот объект из БД. |
Наличие объектов и корректный вывод значения атрибута. |
Major |
|
DB7 |
Поддержка аудита вставки нового объекта с атрибутом типа DATE |
Поддержка функционирования аудита на вставку нового объекта с атрибутом типа DATE |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных DATE. 2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на атрибут, на объект и на выбранный объектный тип. |
Наличие записи аудита о вставки в логе атрибута и объекта. |
Major |
|
DB8 |
Поддержка аудита изменения объекта с атрибутом типа DATE |
Поддержка функционирования аудита на изменение объекта с атрибутом типа DATE |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных DATE. 2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о изменении в логе атрибута и объекта. |
Major |
|
DB9 |
Поддержка аудита удаления объекта с атрибутом типа DATE |
Поддержка функционирования аудита на удаление объекта с атрибутом типа DATE |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных DATE. 2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о удаление в логе атрибута и объекта. |
Major |
|
DB10 |
Поддержка аудита вставки нового объекта с атрибутом типа CLOB |
Поддержка функционирования аудита на вставку нового объекта с атрибутом типа CLOB |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных CLOB. 2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на атрибут, на объект и на выбранный объектный тип. |
Наличие записи аудита о вставки в логе атрибута и объекта. |
Major |
|
DВ11 |
Поддержка аудита изменения объекта с атрибутом типа CLOB |
Поддержка функционирования аудита на изменение объекта с атрибутом типа CLOB |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных CLOB. 2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о изменении в логе атрибута и объекта. |
Major |
|
DB12 |
Поддержка аудита удаления объекта с атрибутом типа CLOB |
Поддержка функционирования аудита на удаление объекта с атрибутом типа CLOB |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных CLOB. 2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о удаление в логе атрибута и объекта. |
Major |
|
DB13 |
Поддержка аудита вставки нового объекта с атрибутом типа DICTIONARY |
Поддержка функционирования аудита на вставку нового объекта с атрибутом типа DICTIONARY |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных CLOB. 2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на атрибут, на объект и на выбранный объектный тип. |
Наличие записи аудита о вставки в логе атрибута и объекта. |
Major |
|
DВ14 |
Поддержка аудита изменения объекта с атрибутом типа DICTIONARY |
Поддержка функционирования аудита на изменение объекта с атрибутом типа DICTIONARY |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных DICTIONARY. 2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о изменении в логе атрибута и объекта. |
Major |
|
DB15 |
Поддержка аудита удаления объекта с атрибутом типа DICTIONARY |
Поддержка функционирования аудита на удаление объекта с атрибутом типа DICTIONARY |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных DICTIONARY. 2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о удаление в логе атрибута и объекта. |
Major |
|
DB16 |
Поддержка аудита вставки нового объекта с атрибутом типа MULTILANG |
Поддержка функционирования аудита на вставку нового объекта с атрибутом типа MULTILANG |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных MULTILANG. 2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на атрибут, на объект и на выбранный объектный тип. |
Наличие записи аудита о вставки в логе атрибута и объекта. |
Major |
|
DВ17 |
Поддержка аудита изменения объекта с атрибутом типа MULTILANG |
Поддержка функционирования аудита на изменение объекта с атрибутом типа MULTILANG |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных MULTILANG. 2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о изменении в логе атрибута и объекта. |
Major |
|
DB18 |
Поддержка аудита удаления объекта с атрибутом типа MULTILANG |
Поддержка функционирования аудита на удаление объекта с атрибутом типа MULTILANG |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных MULTILANG. 2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о удаление в логе атрибута и объекта. |
Major |
|
DB19 |
Поддержка аудита вставки нового объекта с атрибутом типа NUMBER |
Поддержка функционирования аудита на вставку нового объекта с атрибутом типа NUMBER |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных NUMBER. 2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на атрибут, на объект и на выбранный объектный тип. |
Наличие записи аудита о вставки в логе атрибута и объекта. |
Major |
|
DВ20 |
Поддержка аудита изменения объекта с атрибутом типа NUMBER |
Поддержка функционирования аудита на изменение объекта с атрибутом типа NUMBER |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных NUMBER. 2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о изменении в логе атрибута и объекта. |
Major |
|
DB21 |
Поддержка аудита удаления объекта с атрибутом типа NUMBER |
Поддержка функционирования аудита на удаление объекта с атрибутом типа NUMBER |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных NUMBER. 2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о удаление в логе атрибута и объекта. |
Major |
|
DB22 |
Поддержка аудита вставки нового объекта с атрибутом типа VARCHAR2 |
Поддержка функционирования аудита на вставку нового объекта с атрибутом типа VARCHAR2 |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных VARCHAR2. 2. Создать новый объект выбранного объектного типа. 3.Вывести аудит на атрибут, на объект и на выбранный объектный тип. |
Наличие записи аудита о вставки в логе атрибута и объекта. |
Major |
|
DВ23 |
Поддержка аудита изменения объекта с атрибутом типа VARCHAR2 |
Поддержка функционирования аудита на изменение объекта с атрибутом типа VARCHAR2 |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных VARCHAR2. 2. Выбрать объект данного объектного типа. 3. Изменить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о изменении в логе атрибута и объекта. |
Major |
|
DB24 |
Поддержка аудита удаления объекта с атрибутом типа VARCHAR2 |
Поддержка функционирования аудита на удаление объекта с атрибутом типа VARCHAR2 |
PL\SQL Developer 7.1.5.1398 |
1. Выбрать объектный тип, который имеет атрибут типа данных VARCHAR2. 2. Выбрать объект данного объектного типа. 3. Удалить выбранный объект. 4.Вывести аудит на атрибут, на объект и на выбранный объект. |
Наличие записи аудита о удаление в логе атрибута и объекта. |
Major |
|
DB25 |
Проверка права владельца на объект |
Удостовериться, что установив права владельца на объект равный 2 - владелец может просматривать и изменять объект. |
PL\SQL Developer 7.1.5.1398 |
1.Выбрать объект. 2.Установить orights равным 2. 3. Зайти в БД с логином владельца объекта. 4. Попытаться выбрать объект. 5. Попытаться изменить объект. |
Возможность просмотра и изменения объекта с логином владельца. |
Critical |
|
DB26 |
Проверка права владельца на объект |
Удостовериться, что установив права владельца на объект равный 1 - владелец может только просматривать объект. |
PL\SQL Developer 7.1.5.1398 |
1.Выбрать объект. 2.Установить orights равным 2. 3. Зайти в БД с логином владельца объекта. 4. Попытаться выбрать объект. 5. Попытаться изменить объект. |
Возможность просмотра и невозможность изменения объекта с логином владельца. |
Critical |
|
DB27 |
Проверка права владельца на объект |
Удостовериться, что установив права владельца на объект равный 0 - владелец не может просматривать и изменять объект. |
PL\SQL Developer 7.1.5.1398 |
1.Выбрать объект. 2.Установить orights равным 2. 3. Зайти в БД с логином владельца объекта. 4. Попытаться выбрать объект. |
Невозможность просмотра и изменения объекта с логином владельца. |
Critical |
|
DB28 |
Проверка права по умолчанию на объект |
Удостовериться, что установив права по умолчанию на объект равный 2 - пользователь-невладелец может просматривать и изменять объект. |
PL\SQL Developer 7.1.5.1398 |
1.Выбрать объект. 2.Установить orights равным 2. 3. Зайти в БД с логином невладельца объекта. 4. Попытаться выбрать объект. 5. Попытаться изменить объект. |
Возможность просмотра и изменения объекта с логином невладельца. |
Critical |
|
DB29 |
Проверка права по умолчанию на объект |
Удостовериться, что установив права по умолчанию на объект равный 1 - пользователь-невладелец может только просматривать объект. |
PL\SQL Developer 7.1.5.1398 |
1.Выбрать объект. 2.Установить orights равным 2. 3. Зайти в БД с логином невладельца объекта. 4. Попытаться выбрать объект. 5. Попытаться изменить объект. |
Возможность просмотра и невозможность изменения объекта с логином невладельца. |
Critical |
|
DB30 |
Проверка права по умолчанию на объект |
Удостовериться, что установив права по умолчанию на объект равный 0 - пользователь-невладелец не может просматривать и изменять объект. |
PL\SQL Developer 7.1.5.1398 |
1.Выбрать объект. 2.Установить orights равным 2. 3. Зайти в БД с логином невладельца объекта. 4. Попытаться выбрать объект. |
Невозможность просмотра и изменения объекта с логином невладельца. |
Critical |
Размещено на Allbest.ru
Подобные документы
Инфологическая модель предметной области. Схемы простых объектов и их свойства. Построение реляционных отношений на основе инфологической модели базы данных. Сетевая и иерархическая даталогическая модели БД. Структура таблиц, реализованных в СУБД Oracle.
курсовая работа [1,0 M], добавлен 10.06.2014Схема взаимодействия подразделений предприятия. Выбор и обоснование технологии проектирования базы данных. Описание объектов базы данных. Разработка запросов на выборку, изменение, обновление и удаление данных. Интерфейсы взаимодействия с базой данных.
курсовая работа [1,4 M], добавлен 25.05.2023Семантическое моделирование данных. Основные понятия модели Entity-Relationship. Построение инфологической модели в виде диаграммы "Таблица-связь". Проектирование физической модели базы данных. Разработка формы заставки, главной, вторичных кнопочных форм.
курсовая работа [1,5 M], добавлен 26.06.2012Анализ проектирования баз данных на примере построения программы ведения информационной системы картотеки ГИБДД. Основные функции базы данных. Обоснование выбора технологий проектирования и реализации базы данных. Описание информационного обеспечения.
курсовая работа [753,0 K], добавлен 27.08.2012Разработка информационной системы учёта данных о клиентах, товарах и услугах в среде MS Access. Технология функционирования существующей ИС компьютерной компании. Модификация инфологической модели БД, проектирование новых экранных форм и отчетов.
курсовая работа [1,5 M], добавлен 20.06.2014Разработка информационно-аналитической системы агентства недвижимости. Обоснование выбора архитектуры базы данных и СУБД. Моделирование потоков данных (DFD диаграмм). Проектирование инфологической модели данных с использованием модели "сущность-связь".
дипломная работа [5,4 M], добавлен 06.06.2013Рассмотрение теоретических основ проектирования. Анализ предметной области и разработка таблиц базы данных. Заполнение таблиц, поиск данных с помощью фильтра. Создание форм, разработка запросов. Создание и настройка отчетов, составление приложения.
курсовая работа [2,8 M], добавлен 01.06.2014Особенности разработки инфологической модели и создание структуры реляционной базы данных. Основы проектирования базы данных. Разработка таблиц, форм, запросов для вывода информации о соответствующей модели. Работа с базами данных и их объектами.
курсовая работа [981,4 K], добавлен 05.11.2011Описание предметной области разрабатываемой базы данных для теннисного клуба. Обоснование выбора CASE-средства Erwin 8 и MS Access для проектирования базы данных. Построение инфологической модели и логической структуры базы данных, разработка интерфейса.
курсовая работа [3,8 M], добавлен 02.02.2014Инфологическое моделирование предметной области. Построение диаграммы потоков данных. Обоснование выбора СУБД. Проектирование пользовательского интерфейса. Комплект поставки и порядок установки системы. Описание функционирования приложения и таблиц.
курсовая работа [3,2 M], добавлен 23.08.2014